常见的文件系统

Linux文件系统: ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, swap
swap: 交换分区
光盘:iso9660
Windows:fat32, ntfs
Unix: FFS, UFS, JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2
分布式文件系统:ceph, moosefs, mogilefs, GlusterFS, Lustre


Linux根据其是否支持"journal"功能:
日志型文件系统: ext3, ext4, xfs, ...
非日志型文件系统: ext2, vfat


Linux的文件系统的组成部分:

内核中的模块:ext4, xfs, vfat
用户空间的管理工具:mkfs.ext4, mkfs.xfs, mkfs.vfat
在正式介绍文件系统的前先说一下创建文件系统之前的格式化问题。


格式化

低级格式化:硬件制造商、分区之前划分磁道,形成簇 磁盘出厂前由厂家完成
高级格式化:分区之后对分区进行,创建文件系统
每种操作系统所设置的文件属性/权限不相同,为了存放这些所需的数据
我们常说的重装系统及格式化都是属于高级格式化层面的。本文所说的文件系统均为高级格式化后的产物。


Linux文件系统管理工具

blkid:块设备属性信息查看
命令使用格式:blkid [OPTION]... [DEVICE]
    -U UUID: 根据指定的UUID来查找对应的设备
    -L LABEL:根据指定的LABEL来查找对应的设备
命令演示:
[root@localhost ~]# blkid /dev/sda1
/dev/sda1: UUID="6efb8a23-bae1-427c-ab10-3caca95250b1" TYPE="xfs"
[root@localhost ~]# blkid -U 6efb8a23-bae1-427c-ab10-3caca95250b1
/dev/sda1

mkfs:文件系统创建工具:

mkfs - build a Linux filesystem
命令使用格式:
1、 mkfs [options] [-t type]  device [size]
    [ -t type] :指定要创建的文件系统类型ext4|xfs|btrfs|vfat|...|]
    [options]:-L 'LABEL': 设定卷标 在创建文件系统同时指定卷标。
              -f 若文件系统已存在,强制覆盖
命令演示:
[root@localhost ~]# mkfs -L 'new1' -t ext4 /dev/sdb5
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=new1
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33685504
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729
Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@localhost ~]# blkid /dev/sdb5
/dev/sdb5: LABEL="new1" UUID="10880486-7ad9-43de-9607-f9bc1fda1edf" TYPE="ext4"

2、 mkfs.FS_TYPE /dev/DEVICE

 FS_TPYE:ext4、xfs、btrfs、vfat...
命令演示:
[root@localhost ~]# mkfs.xfs -L 'new2' /dev/sdb6        
mkfs.xfs: /dev/sdb6 appears to contain an existing filesystem (ext3).
mkfs.xfs: Use the -f option to force overwrite.
[root@localhost ~]# mkfs.xfs -f -L 'new2' /dev/sdb6
meta-data=/dev/sdb6              isize=256    agcount=4, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=25600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# blkid /dev/sdb6
/dev/sdb6: LABEL="new2" UUID="ed636bf6-1cee-43d1-96e2-8baa8dc29087" TYPE="xfs"
若/dev/sdb# 指定的磁盘块已经存在文件系统,执行命令mkfs会失败,若加-f,则强制将原文件系统覆盖。慎用-f。

…………………………………………………………………………………………………………

mke2fs:ext系列文件系统专用管理工具

mke2fs - create an ext2/ext3/ext4 filesystem

    -t {ext2|ext3|ext4}指明要创建的文件系统类型

    -b {1024|2048|4096}指明文件系统的块大小

    -L 'LABEL'指明卷标

    -j: 创建有日志功能的文件系统ext3

mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3

    -i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小;

    -N #:为数据空间创建个多少个inode;

    -m #: 为管理人员预留的空间占据的百分比;

    -O [^]FEATHER:开启或关闭某种特性;

命令演示:mk2fs创建ext2格式的文件系统
[root@localhost ~]# mke2fs -t ext2 /dev/sd
sda   sda1  sda2  sdb   sdb1  sdb2  sdb5  sdb6  sdb7  
[root@localhost ~]# mke2fs -t ext2 /dev/sdb7
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729
Allocating group tables: 完成                            
正在写入inode表: 完成                            
Writing superblocks and filesystem accounting information: 完成
[root@localhost ~]# blkid /dev/sdb7
/dev/sdb7: UUID="4b9767fc-a8bf-4dda-9ce1-50eb5418da04" TYPE="ext2"
指定inode数及为管理人员预留空间的百分比
[root@localhost ~]# mke2fs -N 1024 -m 3 /dev/sdb7
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
1040 inodes, 102400 blocks
3072 blocks (3.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
80 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729
Allocating group tables: 完成                            
正在写入inode表: 完成                            
Writing superblocks and filesystem accounting information: 完成

e2label:管理ext系列文件系统的LABEL

    查看:e2label device

    设定:e2label device LABEL

命令演示:设定指定块设备的卷标

[root@localhost ~]# e2label /dev/sdb7 new3
[root@localhost ~]# e2label /dev/sdb7
new3
tune2fs:重新设定ext系列文件系统可调整参数的值(不进行格式化)
    -l:查看指定文件系统超级块信息;super block
    -L 'LABEL':修改卷标
    -m #:修预留给管理员的空间百分比
    -j: 将ext2升级为ext3
    -O: 文件系统属性启用或禁用
    -o: 调整文件系统的默认挂载选项
    -U UUID: 修改UUID号;
命令演示:修改卷标

[root@localhost ~]# tune2fs -L 'another label' /dev/sdb7
tune2fs 1.42.9 (28-Dec-2013)
[root@localhost ~]# blkid /dev/sdb7
/dev/sdb7: LABEL="another label" UUID="a57b2116-d72b-48d2-a648-bb6d2d5487ac" TYPE="ext2"
升级ext2到ext3
[root@localhost ~]# tune2fs -j /dev/sdb7
tune2fs 1.42.9 (28-Dec-2013)
Creating journal inode: 完成
[root@localhost ~]# blkid /dev/sdb7
/dev/sdb7: LABEL="another label" UUID="a57b2116-d72b-48d2-a648-bb6d2d5487ac" SEC_TYPE="ext2" TYPE="ext3"
dumpe2fs:

    -h:查看超级块信息等同于tune2fs -l
命令演示:

[root@localhost ~]# dumpe2fs -h /dev/sdb7
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   another label
Last mounted on:         
Filesystem UUID:          a57b2116-d72b-48d2-a648-bb6d2d5487ac
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype sparse_super
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              1040
Block count:              102400
Reserved block count:     3072
Free blocks:              96568
Free inodes:              1029
First block:              1
Block size:               1024
Fragment size:            1024
Reserved GDT blocks:      256
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         80
Inode blocks per group:   10
Filesystem created:       Sun Aug 21 20:11:13 2016
Last mount time:          n/a
Last write time:          Sun Aug 21 20:52:01 2016
Mount count:              0
Maximum mount count:      -1
Last checked:             Sun Aug 21 20:11:13 2016
Check interval:           0 ()
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      3e1f3581-59c7-41b3-bd4f-d262e3ce026e
Journal backup:           inode blocks
Journal features:         (none)
日志大小:             4113k
Journal length:           4096
Journal sequence:         0x00000001
Journal start:            0

fsck:check and repair a Linux file system检查修复Linux文件系统

因进程意外中止或系统崩溃等 原因导致定稿操作非正常终止时,可能会造成文件损坏;此时,应该检测并修复文件系统; 建议,离线进行;
    -t fstype:指明文件系统类型;比如:fsck -t ext4 = fsck.ext4
    -a:无须交互而自动修复所有错误;
    -r:交互式修复;
Note: FS_TYPE一定要与分区上已经文件类型相同;
…………………………………………………………………………………………………………
e2fsck:ext系列文件专用的检测修复工具
    -y:自动回答为yes;
    -f:强制修复;


    总结
文件系统管理工具
通用:mkfs、blkid、fsck
ext系列文件系统专用工具:mke2fs、dumpe2fs、tune2fs、e2label、e2fsck

简要比较两种类型的命令
[root@localhost ~]# dumpe2fs /dev/sda1
dumpe2fs 1.42.9 (28-Dec-2013)
dumpe2fs: Bad magic number in super-block 当尝试打开 /dev/sda1 时
找不到有效的文件系统超级块.
[root@localhost ~]# blkid /dev/sda1
/dev/sda1: UUID="6efb8a23-bae1-427c-ab10-3caca95250b1" TYPE="xfs"


fsck是为检查各种不同的文件系统提供一个统一的用户界面。
 e2fsck - check a Linux ext2/ext3/ext4 file system
仅仅如此区别,我在网上搜索了大半天都没有找到结果,最后却是用man比较的时候比较出来了。太笨了!!!
但是在网上找到了关于这两个命令的用法:

fsck

使用方式 : fsck [-sACVRP] [-t fstype] [--] [fsck-options] filesys [...]

说明 : 检查与修复 Linux 档案系统,可以同时检查一个或多个 Linux 档案系统


参数 :

filesys : device 名称(eg./dev/sda1),mount 点 (eg. / 或 /usr)
-t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
-s : 依序一个一个地执行 fsck 的指令来检查
-A : 对/etc/fstab 中所有列出来的 partition 做检查
-C : 显示完整的检查进度
-d : 列印 e2fsck 的 debug 结果
-p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
-R : 同时有 -A 条件时,省略 / 不检查
-V : 详细显示模式
-y : 预先设定所有检查时的问题均回答[是]
-a : 如果检查有错则自动修复
-r : 如果检查有错则由使用者回答是否修复

例子 :
检查 msdos 档案系统的 /dev/hda5 是否正常,如果有异常便自动修复 :
fsck -t msdos -a /dev/hda5

注意 :
此指令可与 /etc/fstab 相互参考操作来加以了解。

e2fsck

使用方式 : e2fsck [-pacnydfvFV] [-b superblock] [-B blocksize] [-l|-L bad_blocks_file] [-C fd] device
       e2fsck - check a Linux ext2/ext3/ext4 file system

参数 :

device : 预备检查的硬盘 partition,例如:/dev/sda1
-a : 对 partition 做检查,若有问题便自动修复,等同 -p 的功能
-b : 设定存放 superblock 的位置
-B : 设定单位 block 的大小
-c : 检查该partition 是否有坏轨
-C file : 将检查的结果存到 file 中以便查看
-d : 列印 e2fsck 的 debug 结果
-f : 强制检查
-F : 在开始检查前,将device 的 buffer cache 清空,避免有错误发生
-l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面
-L bad_blocks_file : 设定坏轨的block资料存到 bad_blocks_file 里面,若无该档则自动产生
-n : 将档案系统以[唯读]方式开启
-p : 对 partition 做检查,若有问题便自动修复
-v : 详细显示模式
-V : 显示出目前 e2fsck 的版本
-y : 预先设定所有检查时的问题均回答[是]

例子 :
检查 /dev/hda5 是否正常,如果有异常便自动修复,并且设定若有问答,均回答[是] :
e2fsck -a -y /dev/hda5
注:只用-y即可。

注意 :
大部份使用 e2fsck 来检查硬盘 partition 的情况时,通常都是情形特殊,因此最好先将该 partition umount,然后再执行 e2fsck 来做检查,若是要非要检查 / 时,则请进入 singal user mode 再执行。
使用例子1  www.2cto.com  
检查 /dev/mapper/VolGroup00-LogVol02 是否有问题,如发现问题便自动修复:
e2fsck -a  /dev/mapper/VolGroup00-LogVol02
执行 e2fsck 或 fsck 前请先 umount partition,否则有机会令档案系统毁损。
分区忙的情况,需要将所有涉及该分区的进程杀掉,有个快速的方法是执行 fuser -k /home 。
如果需要对根目录 (/) 进行检查及修复,便需要进入 singal user mode 执行。
最后别忘了将分区mount上。
2.   fsck -y    分区名称