首页 > 代码库 > 文件系统进阶(下)

文件系统进阶(下)

六、文件系统检测和修复

因进程意外中止或系统崩溃等情况导致定稿非正常中止时,可能会导致文件损坏;此时,应该修复文件系统。

  • 常发生于死机或者非正常关机之后

  • 挂载为文件系统标记为“ 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

文件系统进阶(下)