文件系统挂载

一、mount、umount、mount -o remount、findmnt、lsof、fuser
二、挂载设置ACL权限、模拟U盘功能、losetup
三、UUID故障处理、分区迁移与恢复、永久挂载光盘分区、挂载USB、永久挂载文件夹
四、SWAP、挂载光盘、制作ISO镜像、制作Centos6Everthing
五、df、du、dd备份/恢复/修复硬盘

mount

挂载:将额外文件系统目录与根文件系统目录建立关联关系,使得此目录做为其它文件访问入口行为。

挂载目录必须事先存在,因此挂载前必须建立好挂载目录。     mkdir /data/sdb2

使用UUID挂载             mount  UUID=”……” /data/sdb2            #稳定推荐

使用设备名挂载            mount  /dev/sdb2 /data/sdb2

使用卷标挂载                mount  LABEL=/data/sdb2 /data/sdb2

挂载信息会更新           /etc/mtab文件

mount -o                    挂载文件系统选项,多个选项使用逗号分隔

例如:把目录对应的挂载设备设为只读状态          mount -o remount,ro /data/sdb1

async /sync       异步与同步模式

sync同步模式:不经过buffer,系统速度会下降,但是文件实时更新不容易丢失

atime/noatime            目录和文件更新或者不更读时间

diratime/nodiratime  目录更新或不更新读时间

exec/noexec:是否支持将文件系统上运行应用程序

此功能能够为临时接入的硬盘或者U盘临时禁用执行权限,防止恶意程序感染,有利于安全。

mount -o remount,noexec /data/sdb2       #这样文件夹下所有可执行文件都不可运行

注意:bash /data/sdb2/f1.sh 依然可以执行,解除非执行状态   mount -o exec,remount /data/sdb2

dev/nodev:是否支持在此文件系统上使用设备文件     mount -o remount,nodev /data/sdb2

suid/nosuid:是否支持suid和sgid权限                           mount -o remount,nosuid /data/sdb2

mount -B      挂载文件夹         例如:mount -B  /data/sbd1 /mnt/sdb1

注意:这种挂载关系df查不到,mount查的到,如果有些文件处于不同的目录下,但是节点编号相同,连接

数为1,就是这种情况导致。

mount -o remount

命令可以不用取消挂载直接挂载另一个,这样可以避免其他用户在用期间进行挂载改挂。

mount -o noacl,remount /dev/sdb1 /data/sdb1

umount

取消挂载:为解除此关联关系的过程。

可以写设备名,或者挂载点名皆可。

注意:如果同一文件夹挂载两个分区a和分区b,会导致第一次挂载的分区a文件无法显示,这时如果取消挂

载分区a,实际被取消挂载的是分区b。

cat /proc/mounts     查看所有挂载点,包括隐藏挂载点

findmnt     查看挂载情况     如:findmnt /data/sdb1

有则说明已经挂载,反之则尚未挂载,编脚本的时候实现测试是否挂载

findmnt /data/sdb2 &> /dev/null || mount /dev/sdb2 /data/sdb2

lsof           查看正在访问指定文件系统的进程           如: lsof /data/sdb1  或者    fuser -v /data/sdb1

fuser        终止所有在正访问指定的文件系统的进程    如:fuser -km /data/sdb1

总结:

1.一个挂载点(文件夹)只能挂一个设备,否则就算挂载成功,最后生效的只是最后一个。

2.挂载分区最好挂载在空文件夹上,不然有可能出现某些原有文件被隐藏无法读取。(如果想访问旧文件,

只能取消挂载点)

3.一个设备可以挂载上多个文件夹,看到的内容一样。

4.对于备份文件目录可以只读方式挂载                                     mount -r /dev/sdb1 /data/sdb1

5.隐藏挂载,不更新/etc/mtab  只在Centos6中有效                mount-n /dev/sdb1  /data/sdb1

则df以及 mount命令等都查不到挂载更新情况,可事实已经挂载,实现隐藏挂载的功能。

挂载次数和检查时间间隔

新建位图图像 (3)

挂载次数累计达到37次或者时间超过六个月,系统会触发条件对磁盘进行修复扫描,防止文件系统被破坏

相当于执行fsck /dev/sdb1

触发次数可以更改      tune2fs -c 20  /dev/sdb1

ACL权限设定

Centos6下手动增加的分区默认没有ACL功能,必须手动添加,有两种方法:

方法一:先取消挂载再重新挂载

生效ACL        umount /data/sdb1   ;  tune2fs -o acl /data/sdb1  ; mount /data/sdb1

取消ACL       umount /data/sdb1    ; tune2fs -o ^acl /data/sdb1 ;mount /data/sdb1

方法二:

生效ACL    mount -o acl  /dev/sdb1  data/sdb1

取消ACL     umount /data/sdb1

如果有用户正在使用无法取消挂载,则用     mount -o noacl,remount /dev/sdb1 /data/sdb1

注意:此命令可实现对于根目录等无法取消挂载的目录实现重新挂载

实验:模拟U盘功能

挂载文件    mount -o loop 可以挂载文件(文件模拟分区)

dd if=/dev/zero of=/root/p1 bs=1M count=100

mkfs.ext4 p1

blkid p1

mount -o loop /root/p1 /mnt

这样进入/mnt目录下看到的文件是储存在p1文件里,文件p1模拟分区使用,然后当u盘用,用scp命令传给

别的机子,然后再挂载实现u盘功能。如 :scp p1 192.168.30.100:/data

注意:这里只是临时生效,并没有写入/etc/fstab,如果要永久生效,必须写入文件,而且不能用UUID,

只能用设备文件名,备注要写成loop,修改完后执行mount -a 直接生效

新建位图图像 (3)

losetup -a    查看所有loop映射关系

Centos6下默认支持最多8个这样的文件挂载设备,可以手工建立     mknod /dev/loop8 b 7 8

修改权限       chmod 660 /dev/loop8

如果使用mount -o  loop 系统会默认分配,要指定分配可以使用:    losetup /dev/loop8 p2

映射关系建立后挂载:         mkdir /data/loop8;mount /dev/loop8 /data/loop8

Centos6如果需要大量增加loop文件可以修改内核文件方法增加:  vim /boot/grub/grub.conf

新建位图图像 (3)

kernel行末尾增加内容max_loop=100,必须reboot生效

总结:

1、挂载在文件夹上的可以是分区、文件夹、文件(以后还有网络分区)

2、默认挂载defaults:相当于rw, suid, dev, exec, auto, nouser, async

3、挂载都是临时生效,要想永久生效,就必须写入文件。

修改/etc/fstab内容

新建位图图像 (3)

前面的1代表每天备份1次,如果是0就代表不备份,2表示2天备份一次

注意:这样写并不代表备份,要结合备份工具才能实现(dump),现在用的较少,一般写0就可以了。后

面的2代表开机时是否检查文件系统完整性(fsck),1、2代表检查次序,0代表不检查。一般都写成0这样

就不会因为错误,而导致机子重启报错。修改完成后,想不重启即时生效内容:

mount -a   读取/etc/fstab内容,直接生效。

4、/etc/fstab文件比较重要,建议备份。

注意:

如果原来已经有的某条记录进行了更改,例如增加ACL功能,然后用mount -a是无法生效的。这时候要

改,可以先取消挂载,然后再重新执行mount -a。但是这种方法有用户正在访问的时候不好用。推荐还是

用mount -o remount /data/sdb2进行更改。

实验:

1、如果更改了UUID但是没有保存,同时该条记录设置了开机检查,重启报错怎么办?

tune2fs -U `uuidgen` /dev/sdb2      ;       blkid /dev/sdb2

解决方法:

1)这时候机子重启后是无法进入系统的,先根据系统提示输入root口令进入系统,然后修改vim /etc/fstab

发现根目录是只读状态,无法修改。

2)用命令mount -o rw,remount /重新挂载后根目录变成可读写状态。

3)进入/etc/fstab里面修改UUID或者修改启动检查项为0都可。

总结:建议修改/etc/fstab前进行备份        cp /etc/fstab{,.bak}

2、如果挂载点被删除,系统还是可以启动的,只需要重新建立挂载点,再挂载即可。

rm -rf /data/sdb2  ;reboot ;mkdir /data/sdb2  ;mount -a

分区迁移

迁移/home到新分区上

随着使用时间的增加,在根目录的/home目录随着用户的使用越来越大,感觉需要增大应对,则需要对现

有的/home分区进行迁移。

1、第一步先做备份/home/(重要)

2、建立分区fdisk、gdisk              fdisk  /dev/sdb

3、建立文件系统                             mkfs.ext4 /dev/sdb1 -L /home

4、建立临时文件夹,挂载临时文件夹     mkdir /mnt/home  ;   mount /dev/sdb1 /mnt/home

5、发布通知,并切换到单用户模式(单机模式会导致断网,只能在机房操作,无法远程操作)

init 1 ;     runlevel             #切换到单用户模式确保没有用户使用/home

6、迁移数据         cp -av /home/* /mnt/home/       #包含隐藏文件可以用cp -av /home/. /mnt/home/

7、删除旧/home分区里的数据,防止空间浪费       rm -rf /home/*   ;   ls /home   ;    ls /mnt/home

8、在/etc/fstab里加入新分区数据 并保存       vim /etc/fstab     ;     r!blkid /dev/sdb1   ;mount -a

9、取消挂载临时目录,删除临时目录       umount /mnt/home  ;rm -rf /mnt/home

10、切换到正常用户模式             init  5

注意:数据必须备份,init1会导致断网,无法远程操作,根分区没法迁移。

把/home移动回根目录下,取消迁移:

mkdir /mnt/home

mount /dev/sdb1 /mnt/home

init1

umount /home

mv /mnt/home/* /home/

vim /etc/fstab

删除挂载信息

umount /mnt/home

rm -rf /mnt/home

fdisk /dev/sdb 删除分区

永久挂载光盘分区

mkdir /mnt/cdrom

mount /dev/sr0 /mnt/cdrom

写入/etc/fstab

/dev/sr0   /mnt/cdrom  iso9660  defaults 0  0

注意:这里不能用UUID和卷标名,只能写设备名

挂载USB介质

手动挂载      mkdir /mnt/usb   ; mount /dev/sdf /mnt/usb

查看USB设备是否识别     lsusb

注意:使用u盘拷贝资料的时候很容易出现未同步问题(buffer)所以要用sync同步,如:

cp /etc/* /mnt/usb    ;sync;sync;sync

永久挂载文件夹

就是文件夹挂载文件夹

mkdir /mnt/boot

vim /etc/fstab

/boot  /mnt/boot       none   bind   0   0

mount -a

处理交换文件和分区

swap

free -m     查询内存的使用情况使用情况

Centos6是buffer和cache分开,Centos7buffer和cache是合并显示

一般的比例是1:2左右,内存1   swap2

具体要根据内存来决定,如果内存大就没必要大

如果想改变swap分区的大小有两种方法:

第一种方法:直接取消swap分区重新分,但是有可能swap正在使用,无法完成。

第二种方法:另外建立一个新的swap分区,建议选择一个高速硬盘来建立swap分区,固态磁盘,如果是机

械磁盘,尽量是空的机械磁盘,而且尽量往外道分(柱面数越小越外圈)。

1、创建SWAP分区         fdisk  /dev/sdb     #记得修改id用t      82 SWAP类型

2、创建SWAP文件系统       mkswap /dev/sdb1 -L swap_sdb1

3、挂载SWAP         vim /etc/fstab ;r!blkid /dev/sdb1         #可以添加优先级信息pri=100 用UUID

4、swapon -a生效

5、swapon -s    相当于运行cat /proc/swaps可以查询当前生效的所有swap分区,包括优先级信息,数字

越大优先级越高优先级可以修改。

永久修改:

可以指定swap分区0到32767的优先级,值越大优先级越高

优化性能:分布存放,高性能磁盘存放

新建位图图像 (3)

保存后先禁用    swapoff /dev/sdb1

然后     swapon -a

临时修改    swapon -p

用文件来做SWAP分区

1、生成文件(创建分区)        dd if=/dev/zero of=/swapfile bs=1024M count=2

2、创建文件系统                      mkswap /swapfile

3、挂载分区(文件速度较慢,不建议加优先级)

vim /etc/fstab       ;  /swapfile      swap    swap   defaults     0  0   ;swapon -a

4、去除所有添加的SWAP分区       swapoff /dev/sdb1   ;swapoff /swapfile

vim /etc/fstab      #删除里面的swap分区信息,

删除文件以及分区         rm -f /swapfile    ;     fdisk /dev/sdb

挂载光盘

在图形界面下,光盘默认自动挂载

手工挂载:      mount /dev/cdrom /mnt/

弹出/弹入光盘      eject/eject -t        #小技巧:弹出光驱定位故障电脑

制作ISO镜像文件

cp /dev/sr0 /data/centos7.iso  或者    dd if=/dev/sr0 of=/data/centos7.iso

把目录打包制作ISO镜像      mkisofs -r -o etc.iso /etc/

查看                                         file etc.iso

刻录光盘                                 wodim –v –eject centos.iso

合并两个盘源(centos6)方便做成yum源

先把两张光盘的内容合并到一个目录里   mkdir /centos6   ;cp /mnt/cdrom/* /centos6/ -r

挂载第二张盘    cp  -rv /mnt/cdrom/. /centos6/      #这里.代表包含隐藏文件,发现相同文件则直接覆盖

mkisofs -r -o /data/Centos-6.9-x86_64-Everything.iso /centos6/

注意:这种光盘可以做yum源,但是不能做启动光盘,要做启动盘可以用

mkdvdiso官方工具制作完整盘,可以引导系统

https://wiki.centos.org/zh/TipsAndTricks/CDtoDVDMedia?highlight=%28mkdvdiso%29

用途:mkdvdiso.sh source /destination/DVD.iso          source 代表有2张光盘内容的目录

df          查看磁盘分区的使用情况

df             默认1K为单位

df -h         人类易读方式

df -I          以节点编号代替块

df -P         以Posix兼容的格式输出,长名字文件对齐

du            显示目录空间的使用情况

du /data/   文件夹内统计

du -h         人类易读

du -s          汇总

du –max-depth 2 /etc/  最大深度

dd           转换和复制文件

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

bs=#:block size, 复制单元大小

count=#:复制多少个bs

skip=blocks     从开头忽略blocks个ibs大小的块

seek=blocks       从开头忽略blocks个obs大小的块

count=n                只拷贝n个记录

例:  建立文档f1      123456   建立文档f2    abcdefgh

1)dd if=f1 of=f2    ;cat f2       结果显示:123456

2)dd if=f1  of=f2  bs=1 count=2 skip=3 seek=4   ;cat f2                               结果显示:abcd45

3)dd if=f1  of=f2 bs=1 count=2 skip=3 seek=4 conv=notrunc   ;cat f2     结果显示:abcd45gh

4)dd if=f2 of=f3 conv=ucase        #转换大小写   结果显示:ABCD45GH

练习:有一个大于2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是

128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,则

dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc

备份MBR:    dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

破坏bootloader:      dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

修复bootloader:         dd if=/tmp/mbr.bak of=/dev/sda bs=64 count=1 skip=446 seek=446

查看bootloader:      hexdump -C /dev/sda -n 512

备份数据: 

dd if=/dev/sdx of=/dev/sdy        #将本地的/dev/sdx整盘备份到/dev/sdy

dd if=/dev/sdx of=/path/to/image  #将/dev/sdx全盘数据备份到指定路径的image文件

dd if=/dev/sdx | gzip >/path/to/image.gz   #备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径

恢复:

dd if=/path/to/image of=/dev/sdx                        #将备份文件恢复到指定盘

gzip -dc /path/to/image.gz | dd of=/dev/sdx      #将压缩的备份文件恢复到指定盘

修复硬盘

dd if=/dev/sda of=/dev/sda

说明:当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到

困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可

能使这些数据起死回生,且这个过程是安全高效的

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/99502

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班