首页 > 代码库 > 文件系统进阶(下)
文件系统进阶(下)
六、文件系统检测和修复
因进程意外中止或系统崩溃等情况导致定稿非正常中止时,可能会导致文件损坏;此时,应该修复文件系统。
常发生于死机或者非正常关机之后
挂载为文件系统标记为“ no clean”
一定不要在挂载状态下修复
1.fsck命令:file system check
常用选项:
-t FS_TYPE:指定文件系统类型,相应地确定调用哪一个修复工具 -a: 自动修复错误 -r: 交互式修复错误
实例:
[root@bash ~]# blkid /dev/sdb /dev/sdb: LABEL="YOUNG" UUID="5272519a-039a-4bf0-817a-6014daec5e15" SEC_TYPE="ext2" TYPE="ext3" [root@bash ~]# fsck -t ext3 -a /dev/sdb fsck from util-linux 2.23.2 YOUNG: clean, 11/1310720 files, 126322/5242880 blocks
2.e2fsck命令
专用于ext系列文件系统检测与修复。
常用选项:
-y:自动回答为yes -f:强制修复
实例:
[root@bash ~]# e2fsck -y -f /dev/sdb e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information YOUNG: 11/1310720 files (0.0% non-contiguous), 126322/5242880 blocks
七、文件系统挂在与卸载
将额外的文件系统与根文件系统上现存的目标建立关联关系,进而使得其作为此额外文件系统访问入口的操作过程即为挂载;拆除此关联关系的操作过程卸载。
挂载位置:挂载点,mount point
固定挂载点:/mnt, /media
文件系统挂载后,挂载点下原有的文件将会被临时隐藏;卸载后,隐藏的文件会再次出现;
挂载方法:# mount DEVICE MOUNT_POINT
1.mount命令
格式:
mount [OPTIONS] [-t FS_TYPE] [-o MOUNT_OPTION] DEVICE MOUNT_POINT
说明:
DEVICE:
(1) 设备文件,如/dev/sdb1;
(2) 卷标,-L LABEL,例如-L MYDATA;
(3) UUID, -U UUID,例如-U 3a96edc3-da29-462f-9ca8-14690b5fdd89;
MOUNT_POINT:事先存在;建议使用空闲目录;
常用的命令选项:
-t FS_TYPE: 指定文件系统类型; -r: read only,只读挂载; -w: read and write,读写挂载; -L LABEL:以LABEL格式指定要挂载的设备; -U UUID:以UUID格式指定要挂载的设备; -a: 自动挂载所有(/etc/fstab)支持自动挂载(挂载选项auto)的文件系统 -n: 挂载时,不更新/etc/mtab文件; -B, --bind:关联目录
实例:
[root@bash ~]# mount -t ext3 -w /dev/sdb /mnt
常用的挂载选项:-o MOUNT_OPTION
async: 使用异步模式;数据的修改操作先于内存中完成,而后根据某策略定期同步至磁盘中实现持久存储; sync: 同步 atime/noatime:对文件和目录都有效; diratime/nodiratime:仅对目录有效; auto/noauto: 设定是否支持mount的-a选项实现自动挂载; dev/nodev:是否支持在此设备使用设备文件; exec/noexec: 是否允许执行此设备上的二进制程序; suid/nosuid:是否允许在此设备上的文件上使用suid; remount:重新挂载 ro: 只读 rw: 读写 user/nouser:是否允许普通用户挂载设备 acl: 在此设备启用facl的功能,默认为不支持
挂在本地回环设备:
mount -o loop /PATH/TO/FILE MOUNT_POINT
实例:
[root@bash ~]# mount -o loop ./archlinux-2016.04.01-dual.iso /root/test/ mount: /dev/loop0 is write-protected, mounting read-only [root@bash ~]# ls test/ arch EFI isolinux loader
重新挂载已经挂载过的文件系统以支持其它挂载选项:
mount -o remount,... DEVICE [MOUNT_POINT]
实例:
[root@bash ~]# mount -t ext3 -o remount,acl,rw /dev/sdb /mnt
挂载目录到目录:
[root@bash ~]# mount --bind vimrc/ test/ [root@bash ~]# ls test/ spf13-vim [root@bash ~]# ls vimrc/ spf13-vim [root@bash ~]# umount test/ [root@bash ~]# ls test/ httpd-2.4.6-40.el7.centos.x86_64.rpm httpd-devel-2.4.6-40.el7.centos.x86_64.rpm httpd-manual-2.4.6-40.el7.centos.noarch.rpm httpd-tools-2.4.6-40.el7.centos.x86_64.rpm repodata
2.查看已经挂载的所有设备:
# mount # cat /etc/mtab # cat /proc/mounts
3.umount命令
umount命令用来卸载已经挂在设备。
格式:
umount DEVICE umount MOUNT_POINT
实例:
[root@bash ~]# umount /mnt [root@bash ~]# umount /dev/sdb
4.fuser、findmnt、lsof命令
查看有哪些进程正在访问指定挂载点:
# fuser -v MOUNT_POINT #lsof MOUNT_POINT
强行中止正在使用此挂载点的进程:
# fuser -km MOUNT_POINT
查看挂载情况:
#findmnt MOUNT_POINT
实例:
[root@bash ~]# fuser -v /media/centos7-mirror/ USER PID ACCESS COMMAND /media/centos7-mirror: root kernel mount /media/centos7-mirror [root@bash ~]# ls /media/centos7-mirror/ CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7 EFI images Packages RPM-GPG-KEY-CentOS-Testing-7 EULA isolinux repodata TRANS.TBL [root@bash ~]# fuser -km /media/centos7-mirror/ [root@bash ~]# findmnt /media/centos7-mirror TARGET SOURCE FSTYPE OPTIONS /media/centos7-mirror /dev/sr0 iso9660 ro,relatime
5.df命令
df命令用于文件系统空间占用等信息查看。
常用选项:
-h: human-readable -i: 显示inode使用率而非默认的磁盘空间使用率 -T: 文件系统类型 -P: 以Posix兼容的格式输出
实例:
[root@bash ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 20G 1022M 19G 5% / devtmpfs 475M 0 475M 0% /dev tmpfs 489M 76K 489M 1% /dev/shm tmpfs 489M 50M 440M 11% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda3 20G 2.9G 18G 15% /usr /dev/sda1 509M 154M 355M 31% /boot tmpfs 98M 44K 98M 1% /run/user/0 /dev/sr0 7.3G 7.3G 0 100% /media/centos7-mirror [root@bash ~]# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda2 20971520 10907 20960613 1% / devtmpfs 121535 391 121144 1% /dev tmpfs 125166 4 125162 1% /dev/shm tmpfs 125166 524 124642 1% /run tmpfs 125166 13 125153 1% /sys/fs/cgroup /dev/sda3 20971520 91748 20879772 1% /usr /dev/sda1 524288 330 523958 1% /boot tmpfs 125166 12 125154 1% /run/user/0 /dev/sr0 0 0 0 - /media/centos7-mirror [root@CentOS6 ~]# df -T Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sda3 ext4 49207096 7511820 39188988 17% / tmpfs tmpfs 1536304 0 1536304 0% /dev/shm /dev/sda1 ext4 194241 129785 54216 71% /boot
6.du命令
du命令用于某目录树占用空间的情况。
格式:
du [OPTIONS] /PATH/TO/DIR
常用选项:
-s: sumary, display only a total for each argument -h: human-readable
实例:
[root@bash ~]# du /etc/httpd/ 40 /etc/httpd/conf 16 /etc/httpd/conf.d 28 /etc/httpd/conf.modules.d 84 /etc/httpd/ [root@bash ~]# du -sh /etc/httpd/ 84K /etc/httpd/
八、文件系统的配置文件: /etc/fstab
1.文件格式:
设备 挂载点 文件系统 挂载选项 转储频率 自检次序
2.格式说明:
1)设备:设备文件、LABLE="lable"、UUID="uuid"、伪文件系统名称
2).挂载点:空闲或专用的目录路径
3).文件系统:指定文件系统类型ext2,ext3,ext4,xfs等
4).挂载选项:defaults: rw, suid, dev, exec, auto, nouser, async, and relatime额外补充其它选项,例如acl,写作“defaults,acl”
5).转储频率(备份频率):能否被dump备份命令作用:dump是一个用来作为备份的命令。通常这个参数的值为0或者1
0:不做备份;
1:每天备份;
2:每隔一天;
6).自检次序:是否检验扇区:开机的过程中,系统默认会以fsck检验我们系统是否为完整(clean)。
0:不自检
1:首先自检;通常只根文件系统可设定为第一自检次序;
2:次级自检,不同设备可以使用同一个自检顺序
九、处理交换文件和分区
交换分区有优先级;性能好的给予较高的优先级;性能一样时使用同等优先级,此时能实现负载均衡的效果;
1.swapon命令
格式:
swapon [OPTIONS] [DEVICE]
常用参数:
-p PRIORITY: 指定优先级,可以指定swap分区0到32767的优先级, 值越大优先级越高,不指定先添加的swap的缺省优先级比较高 -a: 启用所有的交换分区
2.关闭交换分区:
swapoff
常用参数:
-a:关闭所有交换分区
3.内存空间空闲及使用状态报告: free
常用参数:
-h:适合阅读形式展现 -m: 以MB为单位; -g: 以GB为单位
实例:
[root@CentOS6 ~]# lsblk #寻找82交换分区设备 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 3.7G 0 rom sda 8:0 0 50G 0 disk ├─sda1 8:1 0 200M 0 part /boot ├─sda2 8:2 0 2G 0 part └─sda3 8:3 0 47.8G 0 part / sdb 8:16 0 50G 0 disk └─sdb1 8:17 0 50G 0 part sdc 8:32 0 20G 0 disk ├─sdc1 (dm-0) 253:0 0 9.2G 0 part └─sdc2 (dm-1) 253:1 0 3.9G 0 part [root@CentOS6 ~]# swapon /dev/sda2 #打开交换分区 [root@CentOS6 ~]# free -h total used free shared buffers cached Mem: 2.9G 1.9G 1.0G 272K 198M 1.5G -/+ buffers/cache: 245M 2.7G Swap: 2.0G 0B 2.0G [root@CentOS6 ~]# swapoff /dev/sda2 #关闭交换分区 [root@CentOS6 ~]# free -h total used free shared buffers cached Mem: 2.9G 1.9G 1.0G 272K 198M 1.5G -/+ buffers/cache: 244M 2.7G Swap: 0B 0B 0B #关闭后交换分区显示为0
注:在fstab文件中开机自动挂载交换分区挂载点不存在,要写为none
十、光盘及移动介质
1.卸载或弹出磁盘
eject
2.创建ISO文件
cp /dev/cdrom /root/centos7.iso mkisofs -r -o /root/etc.iso /etc
3.刻录光盘
wodim –v –eject centos.iso
十一、dd工具使用说明
(一)、dd命令的解释
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
注意:指定数字的地方若以下列字符结尾则乘以相应的数字:b=512;c=1;k=1024;w=2
常用参数:
if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file > of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file > ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。 obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。 bs=bytes:同时设置读入/输出的块大小为bytes个字节。 skip=blocks:从输入文件开头跳过blocks个块后再开始复制。 seek=blocks:从输出文件开头跳过blocks个块后再开始复制。 注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。 count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
(二)、dd应用实例
1.将本地的/dev/hdb整盘备份到/dev/hdd
dd if=/dev/hdb of=/dev/hdd
2.将/dev/hdb全盘数据备份到指定路径的image文件
dd if=/dev/hdb of=/root/image
3.将备份文件恢复到指定盘
dd if=/root/image of=/dev/hdb
4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
dd if=/dev/hdb | gzip > /root/image.gz
5.将压缩的备份文件恢复到指定盘
gzip -dc /root/image.gz | dd of=/dev/hdb
6.备份磁盘开始的512个字节大小的MBR信息到指定文件
dd if=/dev/hda of=/root/image count=1 bs=512 count=1指仅拷贝一个块;bs=512指块大小为512个字节。
恢复:dd if=/root/image of=/dev/hda
7.拷贝内存内容到硬盘
dd if=/dev/mem of=/root/mem.bin bs=1024 (指定块大小为1k)
8.拷贝光盘内容到指定文件夹,并保存为cd.iso文件
dd if=/dev/cdrom of=/root/cd.iso
9.增加swap分区文件大小
第一步:创建一个大小为256M的文件:
dd if=/dev/zero of=/swapfile bs=1024 count=262144
第二步:把这个文件变成swap文件:
mkswap /swapfile
第三步:启用这个swap文件:
swapon /swapfile
第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:
/swapfile swap swap default 0 0
10.销毁磁盘数据
dd if=/dev/urandom of=/dev/hda1
注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。
11.测试硬盘的读写速度
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file dd if=/root/1Gb.file bs=64k | dd of=/dev/null
通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。
12.确定硬盘的最佳块大小:
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。
13.修复硬盘:
dd if=/dev/sda of=/dev/sda 或dd if=/dev/hda of=/dev/hda
当硬盘较长时间(一年以上)放置不使用后,磁盘上会产生magnetic flux point,当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。并且这个过程是安全、高效的。
/dev/null和/dev/zero的区别
/dev/null------它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。 /dev/zero------该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。
14.备份MBR:
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
15.破坏MBR中的分区表
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
本文出自 “追求不完美” 博客,请务必保留此出处http://yolynn.blog.51cto.com/11575833/1895137
文件系统进阶(下)