博文十四:Linux文件系统管理

一、简述

    1.分类  

        1.1)根据使用场景分类

            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

        1.2)根据是否支持“journal(日志)”功能分类

            日志型文件系统:ext3,ext4,xfs...

            非日志型文件系统:ext2,vfat

    2.文件系统的组成部分

        内核中的模块:ext4,xfs,vfat

        用户空间的管理工具:mkfs.ext4,mkfs.xfs,mkfs.vfat

二、使用

    1.文件系统创建

        1.1)mkfs命令

            mkfs - 创建一个 Linux 文件系统。

            A)格式

                a.方式一

~]# mkfs.FS_TYPE /dev/DEVICE
mkfs.FS_TYPE:
mkfs.btrfs   mkfs.ext2    mkfs.ext4    mkfs.minix   mkfs.vfat    
mkfs.cramfs  mkfs.ext3    mkfs.fat     mkfs.msdos   mkfs.xfs 

# 设定卷标
-L 'LABEL'

                b.方式二

~]# mkfs -t FS_TYPE /dev/DEVICE
FS_TYPE:
btrfs   cramfs  ext2    ext3    ext4    fat     minix   msdos   vfat    xfs

# 设定卷标
-L 'LABEL'

            B)案例

# 查看需要分区的硬盘(这里新加了一块硬盘)
[root@wybaron_host1015 ~]# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb
# 进行“ext4”格式的分区,设置卷标为“ext4_TEST”
[root@wybaron_host1015 ~]# mkfs.ext4 -L ext4_TEST /dev/sdb 
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
无论如何也要继续? (y,n) y
文件系统标签=ext4_TEST
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成   
# 查看分区块是否存在
[root@wybaron_host1015 ~]# fdisk -l /dev/sdb

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
# 根据卷标查看对应设备
[root@wybaron_host1015 ~]# blkid -L ext4_TEST 
/dev/sdb

        1.2)mke2fs命令

            ext[2|3|4]文件系统专用的创建工具。

            A)格式

~]# mke2fs [ -b block-size ] [ -i bytes-per-inode ] [ -j ][ -N number-of-inodes ] [  -m reserved-blocks-percentage  ] [ -O feature[,...]  ] [ -L volume-label ] [ -t fs-type ]
  -b block-size:以字节为单位指定块的大小,常用格式:-b {1024|2048|4096}
  -i bytes-per-inode:为数据空间每多少个字节创建一个inode(指定字节/索引的比率),此大小不应该小于block(块)大小,常用格式:-i #
  -j:相当于“-t ext3”,mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
  -N number-of-inodes,为数据空间创建多少个inode,常用格式:-N #
  -m reserved-blocks-percentage:为管理人员预留的空间占据的百分比,常用格式:-m #
  -O feature[,...]:启用指定特性
    -O ^feature[,...] 关闭指定特性
  -L volume-label:指定卷标
  -t fs-type:指定文件系统类型,常用格式:-t {ext2|ext3|ext4}

# inode节点数的选择
  inode节点的大小一般是128字节或256字节。inode节点的总数,在格式化时就给定了,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为256字节,每1KB就设置一个inode,那么inode table的大小就会达到256MB,占整块硬盘的25.6%。(具体什么是inode,可参见“补充”的笔录)

            B)案例

[root@wybaron_host1015 ~]# mke2fs -b 4096 -i 2048 -N 1000 -m 1 -L ext2_TEST -t ext2 /dev/sdb 
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
无论如何也要继续? (y,n) y
文件系统标签=ext2_TEST
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2560 inodes, 5242880 blocks
52428 blocks (1.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
16 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Writing superblocks and filesystem accounting information: 完成   
[root@wybaron_host1015 ~]# df /dev/sdb
文件系统         1K-块  已用    可用 已用% 挂载点
devtmpfs       1919536     0 1919536    0% /dev
[root@wybaron_host1015 ~]# df -i /dev/sdb
文件系统        Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs       479884     378  479506       1% /dev

        1.3)mkswap命令

        在一个设备上或者在一个文件里创建一个linux交换区,前提必须调整其分区的ID为82。

            A)格式

~]# mkswap [OPTIONS] DEVICE [SIZE]
# 设定卷标
  -L 'LABEL'
# 其它帮助可以使用“man mkswap”查看

            B)案例

[root@wybaron_host1015 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x0521ca40 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):m
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition s system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB

命令(输入 m 获取帮助):l

 0  空              24  NEC DOS         81  Minix / 旧 Linu bf  Solaris        
 1  FAT12           27  隐藏的 NTFS Win 82  Linux 交换 / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 隐藏的 C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux 扩展      c7  Syrinx         
 5  扩展            41  PPC PReP Boot   86  NTFS 卷集       da  非文件系统数据 
 6  FAT16           42  SFS             87  NTFS 卷集       db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux 纯文本    de  Dell 工具      
 8  AIX             4e  QNX4.x 第2部分  8e  Linux LVM       df  BootIt         
 9  AIX 可启动      4f  QNX4.x 第3部分  93  Amoeba          e1  DOS 访问       
 a  OS/2 启动管理器 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad 休 eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 扩展 (LBA)  54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC  
11  隐藏的 FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq 诊断     5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  隐藏的 FAT16 <3 61  SpeedStor       ab  Darwin 启动     f2  DOS 次要       
16  隐藏的 FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  隐藏的 HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST 智能睡眠    65  Novell Netware  b8  BSDI swap       fd  Linux raid 自动
1b  隐藏的 W95 FAT3 70  DiskSecure 多启 bb  Boot Wizard 隐  fe  LANstep        
1c  隐藏的 W95 FAT3 75  PC/IX           be  Solaris 启动    ff  BBT            
1e  隐藏的 W95 FAT1 80  旧 Minix       

命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”

命令(输入 m 获取帮助):w       
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@wybaron_host1015 ~]# mkswap -L swap_TEST /dev/sdb1
正在设置交换空间版本 1,大小 = 20970492 KiB
LABEL=swap_TEST, UUID=bb487ba9-7865-4ced-9ac9-3b5c797047a5
[root@wybaron_host1015 ~]# fdisk -l /dev/sdb

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0521ca40

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41943039    20970496   82  Linux swap / Solaris

    2.文件系统查看

        2.1)blkid命令

            用于定位或输出块设备的属性信息。

            A)格式

~]# blkid [OPTION]... [DEVICE]
-U UUID:根据指定的UUID来查找对应的设备
-L LABEL:根据指定的LABEL(卷标)来查找对应的设备

            B)案例

[root@wybaron_host1015 ~]# blkid 
/dev/sdb: LABEL="ext4_TEST" UUID="76ad0794-7b12-4e52-88dc-c19cf2313058" TYPE="ext4" 
# 根据UUID定位设备
[root@wybaron_host1015 ~]# blkid -U 76ad0794-7b12-4e52-88dc-c19cf2313058
/dev/sdb
# 根据卷标定位设备
[root@wybaron_host1015 ~]# blkid -L ext4_TEST 
/dev/sdb

        2.2)dumpe2fs命令

            用于查看设备超级块信息。

            A)格式

~]# dumpe2fs [选项] device
  -h 查看超级块信息

            B)案例

[root@wybaron_host1015 ~]# dumpe2fs -h /dev/sdb
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   
Last mounted on:          
Filesystem UUID:          19e2624d-40c1-4ec8-939d-c75dd5ca04d5
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              1310720
Block count:              5242880
Reserved block count:     262144
Free blocks:              5116558
Free inodes:              1310709
First block:              0
Block size:               4096
Fragment size:            4096
Group descriptor size:    64
Reserved GDT blocks:      1024
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Thu Oct  4 12:30:26 2018
Last mount time:          n/a
Last write time:          Thu Oct  4 12:30:26 2018
Mount count:              0
Maximum mount count:      -1
Last checked:             Thu Oct  4 12:30:26 2018
Check interval:           0 ()
Lifetime writes:          132 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:	          256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      81c6483f-42ad-43e8-bbf8-71242552c56c
Journal backup:           inode blocks
Journal features:         (none)
日志大小:             128M
Journal length:           32768
Journal sequence:         0x00000001
Journal start:            0

    3.文件系统修改

        3.1)e2label命令

            更改ext2,ext3,ext4文件系统的标签、卷标。

            A)格式

~]# e2label device [ new-label ]

            B)案例

[root@wybaron_host1015 ~]# blkid -L ext4_TEST
/dev/sdb
[root@wybaron_host1015 ~]# e2label /dev/sdb ext4_test
[root@wybaron_host1015 ~]# blkid -L ext4_test 
/dev/sdb

        3.2)tune2fs命令

            调整ext2,ext3,ext4文件系统的可调节参数。

            A)格式

~]# tune2fs [ -l ] [ -L volume-name ] [ -j ] [ -m reserved-blocks-percentage ] [ -o [^]mount-options[,...] ] [ -O [^]feature[,...]  ] [ -U UUID ] device
  -l:查看指定文件系统超级块(super block)信息
  -L volume-name:修改卷标
  -j:将ext2升级为ext3
  -m reserved-blocks-percentage:预留给管理员的空间百分比
  -o [^]mount-options[,...]:调整文件系统的默认挂载选项
  -O [^]feature[,...]:文件系统属性启用或禁用
  -U UUID:修改UUID号

            B)案例

[root@wybaron_host1015 ~]# mkfs.ext2 -L ext2_TEST /dev/sdb
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
无论如何也要继续? (y,n) y
文件系统标签=ext2_TEST
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Writing superblocks and filesystem accounting information: 完成   

[root@wybaron_host1015 ~]# tune2fs -j -L ext3_TEST /dev/sdb
tune2fs 1.42.9 (28-Dec-2013)
Creating journal inode: 完成
[root@wybaron_host1015 ~]# mkdir data
[root@wybaron_host1015 ~]# mount /dev/sdb data/
[root@wybaron_host1015 ~]# df -lhT
文件系统                类型      容量  已用  可用 已用% 挂载点
...
/dev/sdb                ext3       20G   45M   19G    1% /root/data

    4.文件系统检测

        e2fsck命令

            用于检测和修复ext2,ext3,ext4文件系统的工具,需要在未挂载状态进行操作。

            A)格式

~]# e2fsck [ OPTIONS ] DEVICE
  -y:自动答复“yes”,进行e2fsck非交互式操作
  -f:强制进行检测和修复
# e2fsck退出码及其意义
  0 没有错误
  1 文件系统错误已修复
  2 文件系统错误已修复,建议重启系统
  4 文件系统错误修复失败
  8 操作失误
  16 语法错误
  32 用户取消操作
  128 共享库错误

            B)案例

[root@wybaron_host1015 ~]# e2fsck -y /dev/sdb
e2fsck 1.42.9 (28-Dec-2013)
/dev/sdb is mounted.
e2fsck: 无法继续, 中止.

[root@wybaron_host1015 ~]# mount /dev/sdb
mount: /dev/sdb 已经挂载或 /root/data 忙
       /dev/sdb 已经挂载到 /root/data 上
[root@wybaron_host1015 ~]# umount /root/data/
[root@wybaron_host1015 ~]# mount /dev/sdb
mount: 在 /etc/fstab 中找不到 /dev/sdb
[root@wybaron_host1015 ~]# e2fsck -y /dev/sdb
e2fsck 1.42.9 (28-Dec-2013)
ext3_TEST: clean, 11/1310720 files, 126322/5242880 blocks
[root@wybaron_host1015 ~]# e2fsck -f /dev/sdb
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
ext3_TEST: 11/1310720 files (0.0% non-contiguous), 126322/5242880 blocks

三、补充

    inode

        1.基础

             inode(发音:eye-node)译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、属主及属组等。

博文十四:Linux文件系统管理_第1张图片

            读取和修改一个文件的时候:
                a)首先根据文件名,找到这个文件的Inode-no(节点数)。

                b)当找到个文件的Inode-no时,就会根据这个number数在inodetable中找到对应的条目。

                c)inodetable(上图)中的信息: 从左到右依次是:节点数、文件类型、文件的权限、硬链接数、用户ID、组ID、文件的大小、时间戳记,最后为指向硬盘上存放数据的数据块的指针(即:inodetable主要用于存储除开文件名,文件具体内容的一张表)。

        综上可知:如果某个文件系统或分区的 inode 使用率达到百分之百,即使磁盘仍有空间,那么依旧无法在该文件系统中创建更多的文件、设备、目录等。

        2.案例

            问题:

                在一台Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了90%,还有50G的剩余空间,用df -i查看/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。 

       原因分析:

            /data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。

        解决方案:

            删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。

            用软连接将空闲分区/opt/data中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题:

~]# ln -s /opt/data/newcache /data/cache 

 

转载于:https://my.oschina.net/comics/blog/2222616

你可能感兴趣的:(博文十四:Linux文件系统管理)