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命令等都查不到挂载更新情况,可事实已经挂载,实现隐藏挂载的功能。
挂载次数和检查时间间隔
挂载次数累计达到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 直接生效
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
在kernel行末尾增加内容max_loop=100,必须reboot生效
总结:
1、挂载在文件夹上的可以是分区、文件夹、文件(以后还有网络分区)
2、默认挂载defaults:相当于rw, suid, dev, exec, auto, nouser, async
3、挂载都是临时生效,要想永久生效,就必须写入文件。
修改/etc/fstab内容
前面的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的优先级,值越大优先级越高
优化性能:分布存放,高性能磁盘存放
保存后先禁用 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