Linux磁盘分区文件系统挂载及逻辑卷管理

1、MBR分区表

1.1 恢复有备份的分区表

初始化服务器:先备份centos8系统(192.168.209.110)上的/dev/sda的MBR分区表,破坏后,通过备份文件恢复。

1)查看110主机的/dev/sda分区表前512字节;

Linux磁盘分区文件系统挂载及逻辑卷管理

2)备份110主机的/dev/sda分区表的64个字节,并备份到111主机上的/data目录中;

Linux磁盘分区文件系统挂载及逻辑卷管理

3)破坏掉110主机上的/dev/sda分区表,并重启系统;

Linux磁盘分区文件系统挂载及逻辑卷管理

4)重启后不能正常进入系统;

Linux磁盘分区文件系统挂载及逻辑卷管理

5)虚拟机里设置centos8光盘镜像;

Linux磁盘分区文件系统挂载及逻辑卷管理

6)设置光盘启动;

Linux磁盘分区文件系统挂载及逻辑卷管理

7)选择Troubleshooting模式;

Linux磁盘分区文件系统挂载及逻辑卷管理

8)选择Rescue a CentOS Linux system;

Linux磁盘分区文件系统挂载及逻辑卷管理

9)选择3 Skip to shell;

Linux磁盘分区文件系统挂载及逻辑卷管理

10)进入系统后,查看没有ip地址

Linux磁盘分区文件系统挂载及逻辑卷管理

11)配置IP地址,使用ip a 或ifconfig命令

Linux磁盘分区文件系统挂载及逻辑卷管理

12)将209.111备份的sda.img文件复制过来

Linux磁盘分区文件系统挂载及逻辑卷管理

13)导入sda.img到/dev/sda分区的64字节

Linux磁盘分区文件系统挂载及逻辑卷管理

4)重启后正常

Linux磁盘分区文件系统挂载及逻辑卷管理

1.2 恢复无备份的分区表

初始化服务器:未备份centos8系统(192.168.209.110)上的/dev/sda的MBR分区表,被破坏后,通过其他相同配置的服务器(209.111)分区表来恢复。

1)跳过/dev/sda分区表的446字节,查看后面的66字节

Linux磁盘分区文件系统挂载及逻辑卷管理

2)跳过/dev/sda分区表的446字节,破坏后面的64字节

Linux磁盘分区文件系统挂载及逻辑卷管理

3)启动后无法进入系统

Linux磁盘分区文件系统挂载及逻辑卷管理

4)开机按ESC键,选择光盘启动

Linux磁盘分区文件系统挂载及逻辑卷管理

5)选择Troubleshooting模式

Linux磁盘分区文件系统挂载及逻辑卷管理

6)选择Rescue a CentOS Linux system

Linux磁盘分区文件系统挂载及逻辑卷管理

7)选择3 Skip to shell

Linux磁盘分区文件系统挂载及逻辑卷管理

8)配置IP地址,使用ip a 或ifconfig命令

Linux磁盘分区文件系统挂载及逻辑卷管理

9)在209.111服务器上备份其分区表的后64字节

Linux磁盘分区文件系统挂载及逻辑卷管理

10)复制209.111服务器上的分区表备份sda111.img到本地服务器(209.110)

Linux磁盘分区文件系统挂载及逻辑卷管理

11)写入到209.110服务器的分区表中,重启后正常

Linux磁盘分区文件系统挂载及逻辑卷管理

2、创建文件系统

2.1 文件系统概念

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。

从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。

支持的文件系统:

各种文件系统:https://en.wikipedia.org/wiki/Comparison_of_file_systems

2.2 文件系统类型

Linux 常用文件系统:

  • ext2:Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分区
  • ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
  • ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升。
  • xfs:SGI,支持最大8EB的文件系统
  • swap
  • iso9660 光盘
  • btrfs(Oracle)
  • reiserfs

Windows 常用文件系统:

  • FAT32
  • NTFS
  • exFAT

Unix:

  • FFS(fast)
  • UFS(unix)
  • JFS2

网络文件系统:

  • NFS
  • CIFS

集群文件系统:

  • GFS2
  • OCFS2(oracle)

分布式文件系统:

  • fastdfs
  • ceph
  • moosefs
  • mogilefs
  • glusterfs
  • Lustre

RAW:

  • 未经处理或者未经格式化产生的文件系统

常用的文件系统特性:

FAT32:

  • ==最多只能支持16TB的文件系统和4GB的文件==

NTFS:

  • ==最多只能支持16EB的文件系统和16EB的文件==

EXT3:

  • 最多只能支持==32TB的文件系统和2TB的文件==,实际只能容纳2TB的文件系统和16GB的文件
  • Ext3目前只支持32000个子目录
  • Ext3文件系统使用32位空间记录块数量和 inode数量
  • 当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块

EXT4:

  • EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本
  • ==Ext4的文件系统容量达到1EB,而支持单个文件则达到16TB==
  • 理论上支持无限数量的子目录
  • Ext4文件系统使用64位空间记录块数量和 inode数量
  • Ext4的多块分配器支持一次调用分配多个数据块
  • 修复速度更快

XFS

  • 根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
  • 用优化算法,日志记录对整体文件操作影响非常小
  • ==是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件则达到8EB==
  • 能以接近裸设备I/O的性能存储数据

查前支持的文件系统:

[root@centos8 ~]# cat /proc/filesystems
nodev   sysfs
nodev   rootfs
nodev   ramfs
nodev   bdev
nodev   proc
nodev   cpuset
nodev   cgroup
nodev   cgroup2
nodev   tmpfs
nodev   devtmpfs
nodev   configfs
nodev   debugfs
nodev   tracefs
nodev   securityfs
nodev   sockfs
nodev   dax
nodev   bpf
nodev   pipefs
nodev   hugetlbfs
nodev   devpts
nodev   autofs
nodev   pstore
nodev   mqueue
        xfs
        ext3
        ext2
        ext4

[root@centos7 ~]# ls /lib/modules/`uname -r`/kernel/fs
binfmt_misc.ko.xz  cachefiles  cifs    dlm    ext4  fscache  gfs2   jbd2   mbcache.ko.xz  nfs_common  nls   pstore      udf     btrfs  ceph  cramfs   exofs  fat    fuse     isofs  lockd       nfs   nfsd        overlayfs  squashfs  xfs

2.3 文件系统选择管理

2.3.1 创建文件系统mkfs

创建文件管理工具

  • mkfs命令:
mkfs.FS_TYPE /dev/DEVICE
    ext4
    xfs
    btrfs
    vfat
mkfs -t FS_TYPE /dev/DEVICE
    -L 'LABEL'      #设定卷标,分区的描述信息,一般用挂载点命名,一目了然

#示例:
mkfs.xfs /dev/sdb1  #创建/dev/sdb1分区的文件系统为xfs,若提示已有其他文件系统,加-f选项
mkfs.xfs /dev/sdb1 -f   #创建后,自动分配一个UUID,32个(16进制)*4=128位(二进制),唯一性
lsblk -f    #查看文件系统

mkfs.ext4 /dev/sdb === mkfs -t ext4 /dev/sdb    #两个命令等价
  • mke2fs:ext系列文件系统专用管理工具(逐渐淘汰)

常用选项:

-t {ext2|ext3|ext4|xfs}         #指定文件系统类型
-b {1024|2048|4096}             #指定块 block 大小,文件占用的最小单位
-L 'LABEL'                      #设置卷标
-j          #相当于 -t ext3, mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i          #为数据空间中每多少个字节创建一个inode;不应该小于block大小
-N          #指定分区中创建多少个inode
-I          #一个inode记录占用的磁盘空间大小,128---4096
-m          #默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...]        #启用指定特性
-O ^FEATURE             #关闭指定特性

范例:查看文件块大小

1)ext4文件系统
tune2fs -l /dev/sda1
block size:     4096(4K)    #文件占用的最小单位是4K,即使1个字节的文件也要占用4K

2)xfs文件系统
xfs_info /data(挂载点)或xfs_info /dev/sda2
bsize=4096

3)指定block大小
mkfs.ext4 -b 1024   #如果该分区中,都是1k左右的小文件,则设置块大小为1k,节省空间

范例:创建文件系统并修改文件系统

1)初始化硬盘/dev/sdb的分区
[root@centos7 ~]# echo -e 'n\np\n1\n\n+500M\nw\n' |fdisk /dev/sdb
[root@centos7 ~]# echo -e 'n\np\n2\n\n+400M\nw\n' |fdisk /dev/sdb
[root@centos7 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    2G  0 disk
├─sdb1            8:17   0  500M  0 part
└─sdb2            8:18   0  400M  0 part

2)查看sdb的分区文件系统类别
[root@centos7 ~]# lsblk -f
NAME            FSTYPE      LABEL           UUID                 MOUNTPOINT
sdb
├─sdb1      #sdb1和sdb2均无文件系统
└─sdb2

3)创建文件系统
[root@centos7 ~]# mkfs.xfs /dev/sdb1
[root@centos7 ~]# mkfs.ext4 /dev/sdb2
[root@centos7 ~]# lsblk -f
NAME            FSTYPE      LABEL   UUID                             MOUNTPOINT
sdb
├─sdb1          xfs                 f2964200-c6b8-49af-a507-7be6a1da8db9
└─sdb2          ext4                39b10cb6-ff63-46b2-a037-b952ad8d38ab

2.3.2 查看和管理分区信息

1、ext系列文件系统工具

1)tune2fs

tune2fs:重新设定ext系列文件系统可调整参数的值

常用选项:

备注:主要使用-l查看ext系列文件系统的元数据
-l          #查看指定文件系统超级块信息;super block
-L 'LABEL'  #修改卷标
-m          #修预留给管理员的空间百分比
-j          #将ext2升级为ext3
-O          #文件系统属性启用或禁用, –O ^has_journal
-o          #调整文件系统的默认挂载选项,–o ^acl
-U UUID     #修改UUID号

范例:

tune2fs -l /dev/sda1    #查看ext系列分区的文件系统元数据
tune2fs -m number /dev/sda1 #修改预留空间百分比,如1代表1%
tune2fs -o acl /dev/sda1    #添加acl权限
tune2fs -o ^acl /dev/sda1   #禁用acl权限
tune2fs -O ^has_journal /dev/sda1   #禁用has_journal,但不能在挂载的分区上禁用,提示错误
tune2fs -O has_journal /dev/sdb2    #启用has_journal
tune2fs -U 

范例:

1) -l
[root@centos7 ~]# lsblk -f
NAME            FSTYPE      LABEL   UUID                         MOUNTPOINT
sdb
├─sdb1          xfs                 f2964200-c6b8-49af-a507-7be6a1da8db9
└─sdb2          ext4                39b10cb6-ff63-46b2-a037-b952ad8d38ab

[root@centos7 ~]# tune2fs -l /dev/sdb1  #sdb1分区类型是xfs的,不能查看
tune2fs 1.42.9 (28-Dec-2013)
tune2fs: Bad magic number in super-block while trying to open /dev/sdb1
Couldn't find valid filesystem superblock.
[root@centos7 ~]# tune2fs -l /dev/sdb2  #查看sdb2分区的元数据

2) -L
[root@centos7 ~]# tune2fs -L test /dev/sdb2
tune2fs 1.42.9 (28-Dec-2013)
[root@centos7 ~]# lsblk -f
NAME            FSTYPE      LABEL     UUID                          MOUNTPOINT
sdb
├─sdb1          xfs                   f2964200-c6b8-49af-a507-7be6a1da8db9
└─sdb2          ext4        test      39b10cb6-ff63-46b2-a037-b952ad8d38ab

3) -m
[root@centos7 ~]# tune2fs -l /dev/sdb2
Filesystem OS type:       Linux
Inode count:              102400
Block count:              409600
Reserved block count:     20480                 #默认保留空间为5%
[root@centos7 ~]# tune2fs -m 1 /dev/sdb2
tune2fs 1.42.9 (28-Dec-2013)
Setting reserved blocks percentage to 1% (4096 blocks)
[root@centos7 ~]# tune2fs -l /dev/sdb2
Filesystem OS type:       Linux
Inode count:              102400
Block count:              409600
Reserved block count:     4096                  #修改保留空间为1%

4) -O
[root@centos7 ~]# tune2fs -O ^has_journal /dev/sdb2
tune2fs 1.42.9 (28-Dec-2013)
[root@centos7 ~]# tune2fs -l /dev/sdb2
tune2fs 1.42.9 (28-Dec-2013)
2)dumpe2fs

dumpe2fs:显示ext文件系统信息,将磁盘块分组管理

常用选项:

-h      #查看超级块元数据信息,不显示分组信息,同tune2fs -l

范例:查看ext文件系统的元数据和分组信息

[root@centos7 ~]# dumpe2fs /dev/sdb1
dumpe2fs 1.42.9 (28-Dec-2013)
dumpe2fs: Bad magic number in super-block while trying to open /dev/sdb1
Couldn't find valid filesystem superblock.
[root@centos7 ~]# dumpe2fs /dev/sdb2
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          39b10cb6-ff63-46b2-a037-b952ad8d38ab
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 huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl    #有acl功能权限
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              102400            #节点数量
Block count:              409600            #块数量,总的空间
Reserved block count:     20480             #被保留的空间,为root保留,默认5%的空间
Free blocks:              386144
Free inodes:              102389
First block:              1
Block size:               1024              #块大小,centos8上是4096
Fragment size:            1024
Group descriptor size:    64
Reserved GDT blocks:      256
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         2048
Inode blocks per group:   256
Flex block group size:    16
Filesystem created:       Mon Feb 22 14:24:22 2021
Last mount time:          n/a
Last write time:          Mon Feb 22 14:24:22 2021
Mount count:              0
Maximum mount count:      -1
Last checked:             Mon Feb 22 14:24:22 2021
Check interval:           0 (<none>)
Lifetime writes:          8 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128       #文件的描述信息占用128字节,centos8里是256字节
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      b7c3b5e3-dd55-4fe3-86c5-ef6bf6a2a312
Journal backup:           inode blocks
Journal features:         (none)
Journal size:             8M
Journal length:           8192
Journal sequence:         0x00000001
Journal start:            0
以上和tune2fs -l /dev/sda1查询的元数据相同
下面是分组数据,包括超级块(Primary superblock)和多个备份超级块(Backup superblock)
Group 0: (Blocks 1-8192)
  Checksum 0x68b6, unused inodes 2037
  Primary superblock at 1, Group descriptors at 2-5
  Reserved GDT blocks at 6-261
  Block bitmap at 262 (+261), Inode bitmap at 278 (+277)
  Inode table at 294-549 (+293)
  3789 free blocks, 2037 free inodes, 2 directories, 2037 unused inodes
  Free blocks: 4404-8192
  Free inodes: 12-2048
Group 1: (Blocks 8193-16384) [INODE_UNINIT]
  Checksum 0xf5fa, unused inodes 2048
  Backup superblock at 8193, Group descriptors at 8194-8197
  Reserved GDT blocks at 8198-8453
  Block bitmap at 263 (bg #0 + 262), Inode bitmap at 279 (bg #0 + 278)
  Inode table at 550-805 (bg #0 + 549)
  7931 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
  Free blocks: 8454-16384
  Free inodes: 2049-4096
...省略...

centos6上,手动分区后默认没有acl权限(安装OS时的分区有acl权限),需要手动添加。centos7、8后,会自动包含acl权限。

3)blkid

blkid 可以查看块设备属性信息

格式:

blkid [OPTION]... [DEVICE]
blkid   #显示有文件系统的分区,会显示TYPE文件类型
lsblk -f    #也可以显示分区的文件系统

范例:

[root@centos7 ~]# blkid
/dev/sda1: UUID="4d6ce1ba-16ec-4d37-951c-afd012231267" TYPE="xfs"
/dev/sda2: UUID="H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe" TYPE="LVM2_member"
/dev/sdb1: UUID="f2964200-c6b8-49af-a507-7be6a1da8db9" TYPE="xfs"
/dev/sdb2: LABEL="test" UUID="39b10cb6-ff63-46b2-a037-b952ad8d38ab" TYPE="ext4"
/dev/mapper/centos-root: UUID="5753dc79-bc4e-4514-9eb7-56e5bbaa5dff" TYPE="xfs"
/dev/mapper/centos-swap: UUID="da97a9bd-58d9-4770-92d8-07b6bd64ac1c" TYPE="swap"
[root@centos7 ~]# lsblk -f
NAME            FSTYPE      LABEL    UUID                                MOUNTPOINT
sda
├─sda1          xfs                 4d6ce1ba-16ec-4d37-951c-afd012231267    /boot
└─sda2          LVM2_member         H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe
  ├─centos-root xfs                 5753dc79-bc4e-4514-9eb7-56e5bbaa5dff    /
  └─centos-swap swap                da97a9bd-58d9-4770-92d8-07b6bd64ac1c    [SWAP]
sdb
├─sdb1          xfs                 f2964200-c6b8-49af-a507-7be6a1da8db9
└─sdb2          ext4        test    39b10cb6-ff63-46b2-a037-b952ad8d38ab

常用选项:

  • -U UUID 根据指定的UUID来查找对应的设备
  • -L LABEL 根据指定的LABEL来查找对应的设备

范例:

[root@centos7 ~]# blkid -L test
/dev/sdb2
[root@centos7 ~]# blkid -U f2964200-c6b8-49af-a507-7be6a1da8db9
/dev/sdb1
[root@centos7 ~]# blkid -U "39b10cb6-ff63-46b2-a037-b952ad8d38ab"
/dev/sdb2
4)e2label

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

e2label DEVICE [LABEL]
e2label /dev/sdb2 test  #修改sdb2的卷标为test

范例:

[root@centos7 ~]# e2label /dev/sdb1 TEST
e2label: Bad magic number in super-block while trying to open /dev/sdb1
Couldn't find valid filesystem superblock.
[root@centos7 ~]# e2label /dev/sdb2 TEST
5)findfs

findfs :查找分区

findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>

范例:

[root@centos7 modules]# findfs LABEL=test
/dev/sdb2
[root@centos7 modules]# findfs UUID=39b10cb6-ff63-46b2-a037-b952ad8d38ab
/dev/sdb2

2、xfs文件系统工具

[root@centos7 modules]# xfs_
xfs_admin      xfs_copy       xfs_estimate   xfs_fsr        xfs_info       xfs_logprint   xfs_metadump   xfs_ncheck     xfs_repair     xfs_bmap       xfs_db         xfs_freeze     xfs_growfs     xfs_io         xfs_mdrestore  xfs_mkfile     xfs_quota      xfs_rtcp
1)xfs_info

xfs_info:显示示挂载或已挂载的 xfs 文件系统信息

xfs_info mountpoint|devname

范例:

[root@centos7 ~]# lsblk -f
NAME            FSTYPE      LABEL   UUID                             MOUNTPOINT
sda
├─sda1          xfs                 4d6ce1ba-16ec-4d37-951c-afd012231267    /boot
└─sda2          LVM2_member         H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe
  ├─centos-root xfs                 5753dc79-bc4e-4514-9eb7-56e5bbaa5dff    /
  └─centos-swap swap                da97a9bd-58d9-4770-92d8-07b6bd64ac1c    [SWAP]
sdb
├─sdb1          xfs                 f2964200-c6b8-49af-a507-7be6a1da8db9
└─sdb2          ext4                39b10cb6-ff63-46b2-a037-b952ad8d38ab

[root@centos7 ~]# xfs_info /dev/sdb1        #未挂载,无法查询
xfs_info: /dev/sdb1 is not a mounted XFS filesystem
[root@centos7 ~]# xfs_info /dev/sda1        #sda1的xfs文件系统信息
meta-data=/dev/sda1              isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

2.3.3 文件系统检测和修复

文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean”

==注意:一定不要在挂载状态下执行下面命令修复==

fsck: File System Check

fsck.FS_TYPE
fsck -t FS_TYPE

注意:FS_TYPE 一定要与分区上的文件类型相同

常用选项:

-a      #自动修复
-r      #交互式修复错误
1、e2fsck:ext系列文件专用的检测修复工具
-y      #自动回答为yes
-f      #强制修复
-p      #自动进行安全的修复文件系统问题
2、实例:修改破坏的ext文件系统

1)centos7系统

[root@centos7 ~]# mkdir /data/sdb2;mount /dev/sdb2 /data/sdb2
[root@centos7 ~]# lsblk -f
NAME            FSTYPE      LABEL    UUID                               MOUNTPOINT
sda
├─sda1          xfs                  4d6ce1ba-16ec-4d37-951c-afd012231267   /boot
└─sda2          LVM2_member          H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe
  ├─centos-root xfs                  5753dc79-bc4e-4514-9eb7-56e5bbaa5dff   /
  └─centos-swap swap                 da97a9bd-58d9-4770-92d8-07b6bd64ac1c   [SWAP]
sdb
├─sdb1          xfs                  f2964200-c6b8-49af-a507-7be6a1da8db9
└─sdb2          ext4        test     39b10cb6-ff63-46b2-a037-b952ad8d38ab   /data/sdb2
sr0             iso9660     CentOS 7 x86_64 2018-11-26-14-22-58-00
[root@centos7 ~]# cp /etc/fstab /data/sdb2
[root@centos7 ~]# cp /etc/fstab /data/sdb2/f1
[root@centos7 ~]# ls /data/sdb2/
f1  fstab  lost+found
[root@centos7 ~]# dd if=/dev/zero of=/dev/sdb2 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00267759 s, 392 MB/s
[root@centos7 ~]# ls /data/sdb2
[root@centos7 ~]# tune2fs -l /dev/sdb2
tune2fs 1.42.9 (28-Dec-2013)
tune2fs: Bad magic number in super-block while trying to open /dev/sdb2
Couldn't find valid filesystem superblock.
[root@centos7 ~]# df
Filesystem          1K-blocks               Used        Available   Use%  Mounted on
/dev/sdb2      18446744073709530478  18446744073709144336  382046   00%  /data/sdb2
[root@centos7 ~]# umount /data/sdb2
[root@centos7 ~]# e2fsck /dev/sdb2 -y
e2fsck 1.42.9 (28-Dec-2013)
test: ***** FILE SYSTEM WAS MODIFIED *****
test: 11/102400 files (0.0% non-contiguous), 23445/409600 blocks
[root@centos7 ~]# tune2fs -l /dev/sdb2
tune2fs 1.42.9 (28-Dec-2013)
...正常显示,省略...
[root@centos7 ~]# mount /dev/sdb2 /data/sdb2/
[root@centos7 ~]# ls /data/sdb2/        #虽然恢复了,但文件未找回
lost+found
[root@centos7 ~]#

2)centos8系统

[root@centos8 ~]# mount /dev/sdb2 /mnt
[root@centos8 ~]# cp /etc/fstab /mnt/f1
[root@centos8 ~]# cp /etc/fstab /mnt/f2
[root@centos8 ~]# ls /mnt
f1 f2 lost+found
[root@centos8 ~]# dd if=/dev/zero of=/dev/sdb2 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00128317 s, 817 MB/s
[root@centos8 ~]# ls /mnt
[root@centos8 ~]# tune2fs -l /dev/sdb2
tune2fs 1.44.6 (5-Mar-2019)
tune2fs: Bad magic number in super-block while trying to open /dev/sdb2
[root@centos8 ~]# umount /mnt
[root@centos8 ~]# e2fsck /dev/sdb2 -y
e2fsck 1.44.6 (5-Mar-2019)
test: ***** FILE SYSTEM WAS MODIFIED *****
test: 13/131072 files (0.0% non-contiguous), 26158/524288 blocks
[root@centos8 ~]# mount /dev/sdb2 /mnt
[root@centos8 ~]# ls /mnt       ##数据不一定能恢复,破坏的时候,如果覆盖了文件,那就不能恢复了
f1 f2 lost+found
[root@centos8 ~]# cat /mnt/f1
UUID=f7f53add-b184-4ddc-8d2c-5263b84d1e15 / xfs defaults 0 0
UUID=5c2216e3-ae34-444e-aa60-83cbaebb47e7 /boot ext4 defaults 1 2
UUID=9a2293a8-9277-4b18-bae1-498e0b9da145 /data xfs defaults 0 0
UUID=eebe3bc7-6d52-4ad9-86aa-916f1a123fd4 swap swap defaults 0 0
[root@centos8 ~]#
3、xfs_repair:xfs文件系统专用检测修复工具
-f      #修复文件
-n      #只检查
-d      #允许修复只读的挂载设备,在单用户(init 1)下修复 / 时使用,然后立即reboot

2.4 挂载

挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为

卸载:为解除此关联关系的过程

把设备关联挂载点:mount Point

挂载点下原有文件在挂载完成后会被临时隐藏,因此,挂载点目录一般为空

进程正在使用中的设备无法被卸载

2.4.1 挂载文件系统mount

格式:

mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint

device      #指明要挂载的设备
mountpoint  #挂载点目录必须事先存在,建议使用空目录

#设备文件:          例如:/dev/sda5
#卷标:-L 'LABEL'   例如 -L 'MYDATA'
#UUID: -U 'UUID'   例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
#伪文件系统名称:proc, sysfs, devtmpfs, configfs

mount常用命令选项

-t vsftype          #指定要挂载的设备上的文件系统类型
-r readonly         #只读挂载
-w read and write   #读写挂载
-n                  #不更新/etc/mtab,mount不可见
-a              #自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L 'LABEL'          #以卷标指定挂载设备
-U 'UUID'           #以UUID指定要挂载的设备
-B, --bind          #绑定目录到另一个目录上
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
    async           #异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全
    sync            #同步模式,内存更改时,同时写磁盘,安全,但效率低下
    atime/noatime   #包含目录和文件
    diratime/nodiratime     #目录的访问时间戳
    auto/noauto     #是否支持开机自动挂载,是否支持-a选项
    exec/noexec     #是否支持将文件系统上运行应用程序
    dev/nodev       #是否支持在此文件系统上使用设备文件
    suid/nosuid     #是否支持suid和sgid权限
    remount         #重新挂载
    ro/rw           #只读、读写
    user/nouser     #是否允许普通用户挂载此设备,/etc/fstab使用
    acl/noacl       #启用此文件系统上的acl功能
    loop            #使用loop设备
    _netdev         #当网络可用时才对网络资源进行挂载,如:NFS文件系统
    defaults        #相当于rw, suid, dev, exec, auto, nouser, async

挂载规则:

  • 一个挂载点同一时间只能挂载一个设备
  • 一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
  • 一个设备可以同时挂载到多个挂载点
  • 通常挂载点一般是已存在的空目录

范例:

一个设备可以同时挂载到多个挂载点
[root@centos7 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    2G  0 disk
├─sdb1            8:17   0  500M  0 part
└─sdb2            8:18   0  400M  0 part
[root@centos7 ~]# mkdir /mnt/test
[root@centos7 ~]# mount /dev/sdb1 /mnt/test
[root@centos7 ~]# ls /mnt/test/
[root@centos7 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    2G  0 disk
├─sdb1            8:17   0  500M  0 part /mnt/test
└─sdb2            8:18   0  400M  0 part
[root@centos7 ~]# touch /mnt/test/f{1..5}.txt
[root@centos7 ~]# ls /mnt/test
f1.txt  f2.txt  f3.txt  f4.txt  f5.txt
[root@centos7 ~]# mkdir /mnt/sdb1;mount /dev/sdb1 /mnt/sdb1
[root@centos7 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
db               8:16   0    2G  0 disk
├─sdb1            8:17   0  500M  0 part /mnt/sdb1
└─sdb2            8:18   0  400M  0 part
[root@centos7 ~]# mount
/dev/sdb1 on /mnt/test type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb1 on /mnt/sdb1 type xfs (rw,relatime,attr2,inode64,noquota)
[root@centos7 ~]# ls /mnt/test/
f1.txt  f2.txt  f3.txt  f4.txt  f5.txt
[root@centos7 ~]# ls /mnt/sdb1/
f1.txt  f2.txt  f3.txt  f4.txt  f5.txt
[root@centos7 ~]# rm -f /mnt/test/f5.txt
[root@centos7 ~]# ls /mnt/sdb1/
f1.txt  f2.txt  f3.txt  f4.txt
[root@centos7 ~]#

一个挂载点同一时间只能挂载一个设备
一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
#挂载点test同时挂载了sdb1和sdb2两个设备,只能看到最后一个设备sdb2的数据,sdb1的数据被隐藏,当取消sdb2的挂载后,恢复sdb1的挂载数据。
[root@centos7 ~]# mount /dev/sdb2 /mnt/test     #把sdb2挂载到test
[root@centos7 ~]# ls /mnt/test                  #没有文件,这是挂载的sdb2
lost+found
[root@centos7 ~]# mount 
/dev/sdb1 on /mnt/test type xfs (rw,relatime,attr2,inode64,noquota) 
/dev/sdb1 on /mnt/sdb1 type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb2 on /mnt/test type ext4 (rw,relatime,data=ordered)
[root@centos7 ~]# ls /mnt/sdb1/                 #原来挂载的sdb1不变
f1.txt  f2.txt  f3.txt  f4.txt
[root@centos7 ~]# touch /mnt/test/sdb2.txt
[root@centos7 ~]# ls /mnt/test
lost+found  sdb2.txt
[root@centos7 ~]# umount /dev/sdb2              #取消挂载
[root@centos7 ~]# ls /mnt/test/                 #恢复挂载sdb1
f1.txt  f2.txt  f3.txt  f4.txt

通常挂载点一般是已存在的空目录,如果该目录有文件,可以隐藏该目录的文件。
[root@centos7 ~]# mkdir /mnt/test2
[root@centos7 ~]# touch /mnt/test2/test2.txt    #在此目录下创建test2文件
[root@centos7 ~]# ls /mnt/test
f1.txt  f2.txt  f3.txt  f4.txt
[root@centos7 ~]# ls /mnt/test2
test2.txt
[root@centos7 ~]# mount /dev/sdb2 /mnt/test2    #挂载sdb2到test2目录
[root@centos7 ~]# mount
/dev/sdb1 on /mnt/test type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb1 on /mnt/sdb1 type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb2 on /mnt/test2 type ext4 (rw,relatime,data=ordered)
[root@centos7 ~]# ls /mnt/test2                 #test2显示的就是sdb2设备的文件
lost+found  sdb2.txt
[root@centos7 ~]# umount /mnt/test2             #取消挂载后,显示原目录的文件
[root@centos7 ~]# ls /mnt/test2
test2.txt

使用UUID和LABEL来挂载

范例:

1)UUID挂载
[root@centos7 ~]# umount -a
[root@centos7 ~]# blkid
/dev/sda1: UUID="4d6ce1ba-16ec-4d37-951c-afd012231267" TYPE="xfs"
/dev/sda2: UUID="H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe" TYPE="LVM2_member"
/dev/sdb1: UUID="f2964200-c6b8-49af-a507-7be6a1da8db9" TYPE="xfs"
/dev/sdb2: LABEL="test" UUID="39b10cb6-ff63-46b2-a037-b952ad8d38ab" TYPE="ext4"
[root@centos7 ~]# mount UUID="f2964200-c6b8-49af-a507-7be6a1da8db9" /mnt/test
[root@centos7 ~]# mount
/dev/sdb1 on /mnt/test type xfs (rw,relatime,attr2,inode64,noquota)
[root@centos7 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    2G  0 disk
├─sdb1            8:17   0  500M  0 part /mnt/test
└─sdb2            8:18   0  400M  0 part
[root@centos7 ~]# ls /mnt/test
f1.txt  f2.txt  f3.txt  f4.txt

2)LABEL挂载
[root@centos7 ~]# lsblk -f
NAME            FSTYPE      LABEL      UUID                             MOUNTPOINT
sdb
├─sdb1          xfs                    f2964200-c6b8-49af-a507-7be6a1da8db9
└─sdb2          ext4        test       39b10cb6-ff63-46b2-a037-b952ad8d38ab
[root@centos7 ~]# mount LABEL=test /mnt/sdb2
mount: mount point /mnt/sdb2 does not exist
[root@centos7 ~]# mount LABEL=test /mnt/test2/
[root@centos7 ~]# ls /mnt/test2
lost+found  sdb2.txt
[root@centos7 ~]# mount
/dev/sdb2 on /mnt/test2 type ext4 (rw,relatime,data=ordered)

范例:只读挂载

-r  只读挂载
[root@centos7 ~]# umount /dev/sdb2
[root@centos7 ~]# mount -r LABEL=test /mnt/test2
[root@centos7 ~]# touch /mnt/test2/123
touch: cannot touch ‘/mnt/test2/123’: Read-only file system
[root@centos7 ~]# rm -f /mnt/test2/sdb2.txt
rm: cannot remove ‘/mnt/test2/sdb2.txt’: Read-only file system
[root@centos7 ~]# mount
/dev/sdb2 on /mnt/test2 type ext4 (ro,relatime,data=ordered)        #ro只读
[root@centos7 ~]#
[root@centos7 ~]# mount -o remount,rw /mnt/test2        #修改挂载权限为rw
[root@centos7 ~]# touch /mnt/test2/123
[root@centos7 ~]# ls /mnt/test2
123  lost+found  sdb2.txt
[root@centos7 ~]# mount
/dev/sdb2 on /mnt/test2 type ext4 (rw,relatime,data=ordered)    #rw读写权限

范例:目录挂载

-B:目录挂载
#把/etc目录挂载到/mnt/etc下
[root@centos7 ~]# mkdir /mnt/etc;mount -B /etc /mnt/etc
[root@centos7 ~]# ll /etc/issue /mnt/etc/issue
-rw-r--r-- 1 root root 23 Apr  8  2020 /etc/issue
-rw-r--r-- 1 root root 23 Apr  8  2020 /mnt/etc/issue
[root@centos7 ~]# echo 'welcome to magedu' >>/mnt/etc/issue     #修改/mnt/etc/issue文件内容
[root@centos7 ~]# cat /etc/issue    #/etc/issue随之改变
\S
Kernel \r on an \m

welcome to magedu
[root@centos7 ~]# ll /etc/issue /mnt/etc/issue      #文件相同
-rw-r--r-- 1 root root 41 Feb 23 13:20 /etc/issue
-rw-r--r-- 1 root root 41 Feb 23 13:20 /mnt/etc/issue
[root@centos7 ~]# ll /etc/issue /mnt/etc/issue -i   #节点号也相同
16778149 -rw-r--r-- 1 root root 41 Feb 23 13:20 /etc/issue
16778149 -rw-r--r-- 1 root root 41 Feb 23 13:20 /mnt/etc/issue
备注:当发现两个文件的节点号相同,但链接数还是1的时候,那么可以查看mount挂载
[root@centos7 ~]# mount
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/centos-root on /mnt/etc type xfs (rw,relatime,attr2,inode64,noquota)

范例:noatime

-o 修改访问时间权限
[root@centos7 ~]# mount /dev/sdb1 /mnt/sdb1
[root@centos7 /]# mount     #时间权限为relatime  实时更新
/dev/sdb1 on /mnt/sdb1 type xfs (rw,relatime,attr2,inode64,noquota)
[root@centos7 /]# echo 'hello' >/mnt/sdb1/f1.txt
[root@centos7 /]# ll /mnt/sdb1 --time=atime -t
total 4
-rw-r--r-- 1 root root 6 Feb 23 10:11 f1.txt
-rw-r--r-- 1 root root 0 Feb 23 10:11 f2.txt
-rw-r--r-- 1 root root 0 Feb 23 10:11 f3.txt
-rw-r--r-- 1 root root 0 Feb 23 10:11 f4.txt
[root@centos7 /]# mount -o remount,noatime /mnt/sdb1    #时间权限修改为noatime,不更新
[root@centos7 /]# mount
/dev/sdb1 on /mnt/sdb1 type xfs (rw,noatime,attr2,inode64,noquota)
[root@centos7 /]# stat /mnt/sdb1/f1.txt
  File: ‘/mnt/sdb1/f1.txt’
  Size: 6               Blocks: 8          IO Block: 4096   regular file
Device: 811h/2065d      Inode: 67          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-02-23 10:11:00.817035877 +0800
Modify: 2021-02-23 13:57:04.344601237 +0800
Change: 2021-02-23 13:57:04.344601237 +0800
 Birth: -
[root@centos7 /]# stat /mnt/sdb1/f2.txt
  File: ‘/mnt/sdb1/f2.txt’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d      Inode: 68          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-02-23 10:11:00.817035877 +0800
Modify: 2021-02-23 10:11:00.817035877 +0800
Change: 2021-02-23 10:11:00.817035877 +0800
 Birth: -
[root@centos7 /]# cat /mnt/sdb1/f2.txt
[root@centos7 /]# ll /mnt/sdb1 --time=atime -t
total 4
-rw-r--r-- 1 root root 6 Feb 23 10:11 f1.txt
-rw-r--r-- 1 root root 0 Feb 23 10:11 f2.txt
-rw-r--r-- 1 root root 0 Feb 23 10:11 f3.txt
-rw-r--r-- 1 root root 0 Feb 23 10:11 f4.txt
[root@centos7 /]# mount -o remount,relatime /mnt/sdb1       #改回relatime
[root@centos7 /]# mount
/dev/sdb1 on /mnt/sdb1 type xfs (rw,noatime,attr2,inode64,noquota)  #但不生效,why

centos8

1)默认挂载,访问文件,时间改变
[root@centos8110 ~]# mount  #/data目录的时间权限为relatime
/dev/sda5 on /data type xfs (rw,relatime,attr2,inode64,noquota)
[root@centos8110 ~]# ll  /data --time=atime -t      #按访问时间排序
total 16
-rw-r--r-- 1 root root   64 Feb  8 02:23 sda.img
crw-r--r-- 1 root root 1, 5 Feb  8 01:45 zero01
crw-r--r-- 1 root root 1, 3 Feb  8 01:44 null01
brw-r--r-- 1 root root 8, 1 Feb  8 01:39 partition-sda1
-rw-r--r-- 1 root root 1003 Feb  1 21:49 passwd
-rw-r--r-- 1 root root  150 Feb  1 21:33 sed.log
-rw-r--r-- 1 root root 1080 Feb  1 21:12 passwd.bak
[root@centos8110 ~]# cat /data/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
...省略...
[root@centos8110 ~]# ll  /data --time=atime -t
total 16
-rw-r--r-- 1 root root 1003 Feb 23 14:23 passwd     #passwd文件的访问时间修改了
-rw-r--r-- 1 root root   64 Feb 23 14:22 sda.img
crw-r--r-- 1 root root 1, 5 Feb  8 14:45 zero01
crw-r--r-- 1 root root 1, 3 Feb  8 14:44 null01
brw-r--r-- 1 root root 8, 1 Feb  8 14:39 partition-sda1
-rw-r--r-- 1 root root  150 Feb  2 10:33 sed.log
-rw-r--r-- 1 root root 1080 Feb  2 10:12 passwd.bak
[root@centos8110 ~]# stat /data/passwd
Access: 2021-02-23 14:23:07.591307881 +0800     #访问时间为今天
Modify: 2021-02-02 10:48:57.880932327 +0800
Change: 2021-02-02 10:48:57.881932346 +0800
 Birth: -

2)关闭访问时间,noatime,访问文件时,时间不变
[root@centos8110 ~]# mount -o remount,noatime /data     #关闭访问时间
[root@centos8110 ~]# mount
/dev/sda5 on /data type xfs (rw,noatime,attr2,inode64,noquota)
[root@centos8110 ~]# ll /data --time=atime -t   
total 16
-rw-r--r-- 1 root root 1003 Feb 23 14:23 passwd
-rw-r--r-- 1 root root   64 Feb 23 14:22 sda.img
crw-r--r-- 1 root root 1, 5 Feb  8 14:45 zero01
crw-r--r-- 1 root root 1, 3 Feb  8 14:44 null01
brw-r--r-- 1 root root 8, 1 Feb  8 14:39 partition-sda1
-rw-r--r-- 1 root root  150 Feb  2 10:33 sed.log
-rw-r--r-- 1 root root 1080 Feb  2 10:12 passwd.bak
[root@centos8110 ~]# stat /data/sed.log
Access: 2021-02-02 10:33:26.639651099 +0800
Modify: 2021-02-02 10:33:22.826580812 +0800
Change: 2021-02-02 10:33:22.826580812 +0800
[root@centos8110 ~]# cat /data/sed.log      #访问sed.log文件
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
[root@centos8110 ~]# ll /data --time=atime -t
total 16
-rw-r--r-- 1 root root 1003 Feb 23 14:23 passwd
-rw-r--r-- 1 root root   64 Feb 23 14:22 sda.img
crw-r--r-- 1 root root 1, 5 Feb  8 14:45 zero01
crw-r--r-- 1 root root 1, 3 Feb  8 14:44 null01
brw-r--r-- 1 root root 8, 1 Feb  8 14:39 partition-sda1
-rw-r--r-- 1 root root  150 Feb  2 10:33 sed.log        #访问时间未更新
-rw-r--r-- 1 root root 1080 Feb  2 10:12 passwd.bak
[root@centos8110 ~]# stat /data/sed.log                 #未更新
Access: 2021-02-02 10:33:26.639651099 +0800
Modify: 2021-02-02 10:33:22.826580812 +0800
Change: 2021-02-02 10:33:22.826580812 +0800

3)重新加载访问时间
[root@centos8110 ~]# mount -o remount,relatime /data
[root@centos8110 ~]# mount
/dev/sda5 on /data type xfs (rw,relatime,attr2,inode64,noquota)
[root@centos8110 ~]# stat /data/sed.log
Access: 2021-02-02 10:33:26.639651099 +0800
Modify: 2021-02-02 10:33:22.826580812 +0800
Change: 2021-02-02 10:33:22.826580812 +0800
[root@centos8110 ~]# cat /data/sed.log
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
[root@centos8110 ~]# stat /data/sed.log
Access: 2021-02-23 14:41:38.206777189 +0800
Modify: 2021-02-02 10:33:22.826580812 +0800
Change: 2021-02-02 10:33:22.826580812 +0800
[root@centos8110 ~]# ll /data --time=atime -t
total 16
-rw-r--r-- 1 root root  150 Feb 23 14:41 sed.log
-rw-r--r-- 1 root root 1003 Feb 23 14:23 passwd

备注:对于访问量大的网站来说,禁用noatime访问时间更新,会优化5%的访问性能。

范例:文件挂载,当U盘使用

1)初始化文件disk.img,格式化ext4文件系统,并挂载到/mnt/loop下
[root@centos7 /]# dd if=/dev/zero of=/data/disk.img bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.524238 s, 200 MB/s
[root@centos7 /]# ll /data/disk.img -h
-rw-r--r-- 1 root root 100M Feb 23 14:58 /data/disk.img
[root@centos7 /]# mkfs.ext4 /data/disk.img
mke2fs 1.42.9 (28-Dec-2013)
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
[root@centos7 /]# blkid /data/disk.img
/data/disk.img: UUID="34dac92a-e905-4114-886d-0e48b1007635" TYPE="ext4"
[root@centos7 /]# mkdir /mnt/loop
[root@centos7 /]# mount /data/disk.img /mnt/loop
[root@centos7 /]# ll /dev/loop*
brw-rw---- 1 root disk  7,   0 Feb 23 14:59 /dev/loop0
crw-rw---- 1 root disk 10, 237 Feb 23 14:59 /dev/loop-control
[root@centos7 /]# df
Filesystem              1K-blocks     Used Available Use% Mounted on
/dev/loop0                  95054     1550     86336   2% /mnt/loop
[root@centos7 /]# losetup -a
/dev/loop0: [64768]:33704142 (/data/disk.img)
[root@centos7 /]# cp /etc/redhat-release /mnt/loop/
[root@centos7 /]# ll //mnt/loop/
-rw-r--r-- 1 root root    37 Feb 23 15:00 redhat-release
[root@centos7 /]# cat /mnt/loop/redhat-release
CentOS Linux release 7.8.2003 (Core)
[root@centos7 /]# scp /data/disk.img 192.168.209.110:/data
[email protected]'s password:
disk.img 

2)复制到centos8系统下,挂载到一个目录中,就可以访问其中的文件了,相当于U盘使用。
[root@centos8110 ~]# ll /data/disk.img -h
-rw-r--r-- 1 root root 100M Feb 23 15:01 /data/disk.img
[root@centos8110 ~]# blkid /data/disk.img       #同centos7下的UUID
/data/disk.img: UUID="34dac92a-e905-4114-886d-0e48b1007635" TYPE="ext4"
[root@centos8110 ~]# mkdir /mnt/disk;mount /data/disk.img /mnt/disk
[root@centos8110 ~]# ll /mnt/disk               #可以看到centos7下的文件
-rw-r--r-- 1 root root    37 Feb 23 15:00 redhat-release
[root@centos8110 ~]# mount
/data/disk.img on /mnt/disk type ext4 (rw,relatime)
[root@centos8110 ~]# file /data/disk.img        #提示该文件是ext4文件系统
/data/disk.img: Linux rev 1.0 ext4 filesystem data, UUID=34dac92a-e905-4114-886d-0e48b1007635 (needs journal recovery) (extents) (64bit) (huge files)

2.4.2 卸载文件系统 umount

卸载时:可使用设备,也可以使用挂载点

umount 设备名|挂载点
umount /dev/sdb1
umount /mnt/sdb1

卸载范例:

1)在该目录中,或文件正使用中,卸载失败
[root@centos7 ~]# cd /mnt/test2
[root@centos7 test2]# pwd
/mnt/test2
[root@centos7 test2]# umount /mnt/test2
umount: /mnt/test2: target is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

2)其他终端访问该目录或文件的时候,卸载失败
#打开一个终端,使用wang账号访问test2目录
[root@centos7 ~]# su wang
[wang@centos7 root]$ cd /mnt/test2
[wang@centos7 test2]$ ls
123  lost+found  sdb2.txt

#查看哪些账号或终端在访问test2目录
[root@centos7 ~]# lsof /dev/sdb2        #或lsof /mnt/test2
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    38775 root  cwd    DIR   8,18     1024    2 /mnt/test2
bash    57066 root  cwd    DIR   8,18     1024    2 /mnt/test2
bash    57538 wang  cwd    DIR   8,18     1024    2 /mnt/test2
[root@centos7 ~]# fuser -v /mnt/test2   #查看哪些用户或终端在访问
                     USER        PID ACCESS COMMAND
/mnt/test2:          root     kernel mount /mnt/test2
                     root      38775 ..c.. bash
                     root      57066 ..c.. bash
                     wang      57538 ..c.. bash
#此时,不能卸载
[root@centos7 ~]# umount /mnt/test2
umount: /mnt/test2: target is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

#使用km选项强制踢出,就可以卸载了         
[root@centos7 ~]# fuser -km /mnt/test2
/mnt/test2:          38775c 57066c 57538c
[root@centos7 ~]# lsof /mnt/test2
[root@centos7 ~]# umount /mnt/test2

2.4.3 查看挂载情况

查看挂载

#通过查看/etc/mtab文件显示当前已挂载的所有设备
mount
#查看内核追踪到的已挂载的所有设备
cat /proc/mounts

查看挂载点情况:

findmnt MOUNT_POINT|device

范例:

[root@centos8110 ~]# mount
/dev/sda5 on /data type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sda1 on /boot type ext4 (rw,relatime)
/data/disk.img on /mnt/disk type ext4 (rw,relatime)
[root@centos8110 ~]# findmnt /data
TARGET SOURCE    FSTYPE OPTIONS
/data  /dev/sda5 xfs    rw,relatime,attr2,inode64,noquota
[root@centos8110 ~]# findmnt /mnt/disk
TARGET    SOURCE     FSTYPE OPTIONS
/mnt/disk /dev/loop0 ext4   rw,relatime
[root@centos8110 ~]# findmnt /etc       #未挂载
[root@centos8110 ~]# echo $?
1

2.4.4 练习

创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统 ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项

1)非交互式创建2G分区
[root@centos7 ~]# echo -e 'n\np\n1\n\n+2G\nw\n' |fdisk /dev/sdb
[root@centos7 ~]# fdisk -l /dev/sdb
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
[root@centos7 ~]# lsblk
NAME            MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda               8:0    0  20G  0 disk
├─sda1            8:1    0   1G  0 part /boot
└─sda2            8:2    0  19G  0 part
  ├─centos-root 253:0    0  17G  0 lvm  /
  └─centos-swap 253:1    0   2G  0 lvm  [SWAP]
sdb               8:16   0   3G  0 disk
└─sdb1            8:17   0   2G  0 part         #分配的2G分区
sr0              11:0    1  10G  0 rom
[root@centos7 ~]# blkid     #无/dev/sdb1
/dev/sda1: UUID="4d6ce1ba-16ec-4d37-951c-afd012231267" TYPE="xfs"
/dev/sda2: UUID="H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="5753dc79-bc4e-4514-9eb7-56e5bbaa5dff" TYPE="xfs"
/dev/mapper/centos-swap: UUID="da97a9bd-58d9-4770-92d8-07b6bd64ac1c" TYPE="swap"

2)创建ext4文件类型,块大小2048byte,预留空间1%,卷标TEST
[root@centos7 ~]# mkfs.ext4 -b 2048 -m 1 -L TEST /dev/sdb1
[root@centos7 ~]# tune2fs -l /dev/sdb1      #查看分区的元数据
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   TEST                  #卷标TEST
Last mounted on:          <not available>
Filesystem UUID:          b9c3f582-b345-4732-80d0-173e7f2acf92
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 huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl            #默认已开通acl权限
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              131072
Block count:              1048576
Reserved block count:     10485                     #预留1%
Free blocks:              994651
Free inodes:              131061
First block:              0
Block size:               2048                      #块大小为2048
Fragment size:            2048
Group descriptor size:    64
Reserved GDT blocks:      512
Blocks per group:         16384
Fragments per group:      16384
Inodes per group:         2048
Inode blocks per group:   256
Flex block group size:    16
Filesystem created:       Wed Feb 24 14:35:38 2021
Last mount time:          n/a
Last write time:          Wed Feb 24 14:35:39 2021
Mount count:              0
Maximum mount count:      -1
Last checked:             Wed Feb 24 14:35:38 2021
Check interval:           0 (<none>)
Lifetime writes:          65 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:      b80119b1-d98a-475c-ba60-25319b966059
Journal backup:           inode blocks
[root@centos7 ~]# lsblk -f      #查看文件类型和卷标UUID等
NAME            FSTYPE      LABEL    UUID                                   MOUNTPOINT
sdb
└─sdb1          ext4        TEST     b9c3f582-b345-4732-80d0-173e7f2acf92

3)自动挂载到/test目录
[root@centos7 ~]# mkdir /test
[root@centos7 ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="TEST" UUID="b9c3f582-b345-4732-80d0-173e7f2acf92" TYPE="ext4"
[root@centos7 ~]# vim /etc/fstab
[root@centos7 ~]# cat /etc/fstab        #使用UUID挂载到/etc/fstab中
UUID=b9c3f582-b345-4732-80d0-173e7f2acf92   /test     ext4    defaults        0 0
[root@centos7 ~]# mount -a
[root@centos7 ~]# mount
/dev/sdb1 on /test type ext4 (rw,relatime,data=ordered)
[root@centos7 ~]# cp /etc/redhat-release /test
[root@centos7 ~]# ll /test
-rw-r--r-- 1 root root    37 Feb 24 14:56 redhat-release
[root@centos7 ~]# reboot        #重启后依然有效
[root@centos7 ~]# ll /test
-rw-r--r-- 1 root root    37 Feb 24 14:56 redhat-release

3 RAID

3.1 什么是RAID

RAID:Redundant Arrays of Inexpensive(Independent) Disks 廉价(独立)磁盘冗余阵列1988年由加利福尼亚大学伯克利分校(University of California-Berkeley) “A Case for RedundantArrays of Inexpensive Disks”,多个磁盘合成一个”阵列“来提供更好的性能、冗余,或者两者都提供

磁盘阵列是把多个磁盘组成一个阵列,当作单一磁盘使用,它将数据以分段或条带(striping)的方式储存在不同的磁盘中。存取数据时,阵列中的相关磁盘一起动作,大幅减低数据的存取时间,同时有更佳的空间利用率。磁盘阵列利用的不同的技术称为RAID level,不同的level针对不同的系统及应用,以解决数据安全的问题。简单来说,RAID把多个硬盘组合成为一个逻辑扇区。因此,操作系统只会把它当作一个硬盘。

RAID功能实现

  • 提高IO能力,磁盘并行读写
  • 提高耐用性,磁盘冗余算法来实现

RAID实现的方式

  • 外接式磁盘阵列:通过扩展卡提供适配能力
  • 内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置
  • 软件RAID:通过OS实现,比如:群晖的NAS

3.2 常用RAID级别

级别:多块磁盘组织在一起的工作方式有所不同

RAID-0:条带卷,strip

RAID-1:镜像卷,mirror

RAID-5、RAID-6、RAID-10、RAID-01、RAID-50等

3.2.1 RAID-0

RAID 0 数据分条(条带)盘 --- 只需要2块以上的硬盘,成本低,可以提高整个磁盘的性能和吞吐量。

striping(条带模式),至少需要两块磁盘,做RAID分区的大小最好是相同的(可以充分发挥并优势);而数据分散存储于不同的磁盘上,在读写的时候可以实现并发,所以相对其读写性能最好;但是没有容错功能,任何一个磁盘的损坏将损坏全部数据。

  • 以 chunk 单位,读写数据
  • 读、写性能提升
  • 可用空间:N*min(S1,S2,...)---即100%
  • 无容错能力----任何一块硬盘损坏都会丢失数据
  • 最少磁盘数:2, 2+

Linux磁盘分区文件系统挂载及逻辑卷管理

3.2.2 RAID-1

RAID 1 磁盘镜像盘 --- 数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件。

mirroring(镜 像卷),至少需要两块硬盘,raid大小等于两个raid分区中最小的容量(最好将分区大小分为一样),可增加热备盘提供一定的备份能力;

数据有冗余,在存储时同时写入两块硬盘,实现了数据备份;

但相对降低了写入性能,但是读取数据时可以并发,几乎类似于raid-0的读取效率;

  • 读性能提升、写性能略有下降
  • 可用空间:1*min(S1,S2,...)---即50%
  • 有冗余能力
  • 最少磁盘数:2, 2N

Linux磁盘分区文件系统挂载及逻辑卷管理

3.2.3 RAID-4(基本不用)

RAID 3 奇偶校验码的并行传送 --- 只能查错不能纠错

RAID 4 带奇偶校验码的独立磁盘结构 --- 对数据的访问是按数据块进行的,也就是按磁盘进行的,RAID3是一次一横条,而RAID4一次一竖条。

  • 多块数据盘异或运算值存于专用校验盘
  • 磁盘利用率 (N-1)/N
  • 有冗余能力
  • 至少3块硬盘才可以实现

3.2.4 RAID-5

需要三块或以上硬盘,可以提供热备盘实现故障的恢复;采用奇偶效验,可靠性强,且只有同时损坏两块硬盘时数据才会完全损坏,只损坏一块硬盘时,系统会根据存储的奇偶校验位重建数据,临时提供服务;此时如果有热备盘,系统还会自动在热备盘上重建故障磁盘上的数据。

  • 读、写性能提升
  • 可用空间:(N-1)*min(S1,S2,...)----即(n-1)/n
  • 有容错能力:允许最多1块磁盘损坏
  • 最少磁盘数:3, 3+

Linux磁盘分区文件系统挂载及逻辑卷管理

3.2.5 RAID-6

RAID 6 带有两种分布存储的奇偶校验码的独立磁盘结构

  • 读、写性能提升
  • 可用空间:(N-2)*min(S1,S2,...)----即(n-2)/n
  • 有容错能力:允许最多2块磁盘损坏
  • 最少磁盘数:4, 4+

Linux磁盘分区文件系统挂载及逻辑卷管理

3.2.6 RAID-10

高可靠性与高效磁盘结构

  • 读、写性能提升
  • 可用空间:N*min(S1,S2,...)/2,只有50%磁盘利用率
  • 有容错能力:每组镜像最多只能坏一块
  • 最少磁盘数:4, 4+

Linux磁盘分区文件系统挂载及逻辑卷管理

3.2.7 RAID-01

多块磁盘先实现RAID0,再组合成RAID1,也只有50%磁盘利用率

Linux磁盘分区文件系统挂载及逻辑卷管理

RAID1+0与RAID0+1的区别:

RAID 1+0是先镜射再分区数据,再将所有硬盘分为两组,视为是RAID 0的最低组合,然后将这两组各自视为RAID 1运作。RAID 0+1则是跟RAID 1+0的程序相反,是先分区再将数据镜射到两组硬盘。它将所有的硬盘分为两组,变成RAID 1的最低组合,而将两组硬盘各自视为RAID 0运作。性能上,RAID 0+1比RAID 1+0有着更快的读写速度。可靠性上,当RAID 1+0有一个硬盘受损,其余三个硬盘会继续运作。RAID 0+1 只要有一个硬盘受损,同组RAID 0的另一只硬盘亦会停止运作,只剩下两个硬盘运作,可靠性较低。因此,RAID 10远较RAID 01常用,零售主板绝大部份支持RAID 0/1/5/10,但不支持RAID 01。

3.2.8 RAID-50

多块磁盘先实现RAID5,再组合成RAID0

Linux磁盘分区文件系统挂载及逻辑卷管理
常见 RAID 总结

RAID Level 性能提升 冗余能力 空间利用率 磁盘数量(块)
RAID 0 读、写提升 100% 至少2
RAID 1 读性能提升,写性能下降 50% 至少2
RAID 5 读、写提升 (n-1)/n% 至少3
RAID 1+0 读、写提升 50% 至少4
RAID 0+1 读、写提升 50% 至少4
RAID 5+0 读、写提升 (n-2)/n% 至少6

4、逻辑卷

4.1 LVM介绍

LVM: Logical Volume Manager 可以允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小,
允许在多个物理设备间重新组织文件系统,LVM可以弹性的更改LVM的容量。

通过交换PE来进行资料的转换,将原来LV内的PE转移到其他的设备中以降低LV的容量,或将其他设备
中的PE加到LV中以加大容量。

实现过程

  • 将设备指定为物理卷
  • 用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
  • 在物理卷上创建的逻辑卷, 是由物理区域(PE)组成
  • 可以在逻辑卷上创建文件系统并挂载

第一个逻辑卷对应设备名:/dev/dm-#

dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块

软链接:

  • /dev/mapper/VG_NAME-LV_NAME
  • /dev/VG_NAME/LV_NAME

范例:查看逻辑卷

/dev/mapper/vol0-root
/dev/vol0/root

[root@centos7 ~]# df
Filesystem              1K-blocks    Used Available Use% Mounted on
devtmpfs                   486084       0    486084   0% /dev
tmpfs                      497840       0    497840   0% /dev/shm
tmpfs                      497840    7956    489884   2% /run
tmpfs                      497840       0    497840   0% /sys/fs/cgroup
/dev/mapper/centos-root  17811456 2938680  14872776  17% /
/dev/sda1                 1038336  197052    841284  19% /boot
tmpfs                       99572       0     99572   0% /run/user/0
[root@centos7 ~]# ll /dev/mapper/centos-root
lrwxrwxrwx 1 root root 7 Feb 24 16:42 /dev/mapper/centos-root -> ../dm-0
[root@centos7 ~]# ll /dev/mapper/centos-swap
lrwxrwxrwx 1 root root 7 Feb 24 16:42 /dev/mapper/centos-swap -> ../dm-1

[root@centos7 ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <17.00g
  swap centos -wi-ao----   2.00g
[root@centos7 ~]# blkid
/dev/sda1: UUID="4d6ce1ba-16ec-4d37-951c-afd012231267" TYPE="xfs"
/dev/sda2: UUID="H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe" TYPE="LVM2_member"
/dev/sr0: UUID="2018-11-26-14-22-58-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="5753dc79-bc4e-4514-9eb7-56e5bbaa5dff" TYPE="xfs"
/dev/mapper/centos-swap: UUID="da97a9bd-58d9-4770-92d8-07b6bd64ac1c" TYPE="swap"
[root@centos7 ~]# cat /etc/fstab
/dev/mapper/centos-root                     /     xfs     defaults        0 0
UUID=4d6ce1ba-16ec-4d37-951c-afd012231267   /boot xfs     defaults        0 0
/dev/mapper/centos-swap                     swap  swap    defaults        0 0

4.2 实现逻辑卷

相关工具来自于 lvm2 包

[root@centos7 ~]# which pvcreate
/usr/sbin/pvcreate
[root@centos7 ~]# rpm -qf `which pvcreate`
lvm2-2.02.186-7.el7_8.2.x86_64
#如果没有lvm2,yum安装即可
[root@centos8 ~]#yum -y install lvm2

4.2.1 pv管理工具

显示pv信息

pvs         #简要pv信息显示
pvdisplay

创建pv

pvcreate /dev/DEVICE

删除pv

pvremove /dev/DEVICE

4.2.2 vg管理工具

显示卷组

vgs
vgdisplay

创建卷组

vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath
[PhysicalDevicePath...]

管理卷组

vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

删除卷组

  • 先做pvmove
  • 再做vgremove

4.2.3 lv管理工具

显示逻辑卷

lvs
Lvdisplay

创建逻辑卷

lvcreate -L|--size Size[m|UNIT] VG
        [ -l|--extents Number[PERCENT] ]

lvcreate -L #[mMgGtT] -n NAME VolumeGroup
lvcreate -l +PE的个数,如有1000个PE,每个为4M,就是分配4G
lvcreate -L +分配的数值M或G等,如1000M,就是分配1G

范例:

lvcreate -l 60%VG -n mylv testvg
lvcreate -l 100%FREE -n yourlv testvg

删除逻辑卷

lvremove /dev/VG_NAME/LV_NAME

重设文件系统大小

fsadm [options] resize device [new_size[BKMGTEP]]
resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]
xfs_growfs /mountpoint

范例:

#创建物理卷
pvcreate /dev/sda3
#为卷组分配物理卷
vgcreate vg0 /dev/sda3
#从卷组创建逻辑卷
lvcreate -L 256M -n data vg0
#mkfs.xfs /dev/vg0/data
#挂载
mount /dev/vg0/data /mnt/data#

实例:

1)增加两块硬盘sdb3G,sdc2G,分区并调整为lvm卷
[root@centos7 ~]# fdisk /dev/sdb        #交互式分区
Command (m for help): n
Select (default p): p
Partition number (1-4, default 1): 1
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e                 #lvm卷
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): w
[root@centos7 ~]# fdisk -l /dev/sdb
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   8e  Linux LVM   
#非交互式分区
[root@centos7 ~]# echo -e 'n\np\n1\n\n+500M\nt\n8e\nw\n' |fdisk /dev/sdc
[root@centos7 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    3G  0 disk
└─sdb1            8:17   0    1G  0 part
sdc               8:32   0    2G  0 disk
└─sdc1            8:33   0  500M  0 part
sr0              11:0    1   10G  0 rom

[root@centos7 ~]# hexdump -C /dev/sdc -n 512
000001b0  00 00 00 00 00 00 00 00  db bc b6 62 00 00 00 20  |...........b... |
000001c0  21 00 8e dd 1e 3f 00 08  00 00 00 a0 0f 00 00 00  |!....?..........|
000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200
[root@centos7 ~]#

2)创建物理卷pvcreate
[root@centos7 ~]# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created.
[root@centos7 ~]# pvcreate /dev/sdb1
WARNING: swap signature detected on /dev/sdb1 at offset 4086. Wipe it? [y/n]: y
  Wiping swap signature on /dev/sdb1.       #sdb1上原有其他分区格式或系统,才有此提示
  Physical volume "/dev/sdb1" successfully created.
[root@centos7 ~]# pvs       #查看新增的两个物理卷sdb1和sdb2
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <19.00g      0
  /dev/sdb1         lvm2 ---    1.00g   1.00g
  /dev/sdc1         lvm2 ---  500.00m 500.00m
[root@centos7 ~]# pvdisplay     #查看物理卷的详细信息
  "/dev/sdb1" is a new physical volume of "1.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               1.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               g7QD6p-hpTr-Ha0K-165n-mEqm-NS30-WiBe3t

  "/dev/sdc1" is a new physical volume of "500.00 MiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name
  PV Size               500.00 MiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               b11Tex-iP7p-752f-QJD1-2YU3-sR7H-ujZ0UJ

3)创建卷组vgcreate
[root@centos7 ~]# vgs   #查看安装系统时自动分配的卷组,卷组名是centos
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <19.00g    0
#把设备sdb1和sdc1创建名为vg_mysql的卷组
[root@centos7 ~]# vgcreate vg_mysql /dev/sdb1 /dev/sdc1
  Volume group "vg_mysql" successfully created
[root@centos7 ~]# vgs   查看创建的卷组
  VG       #PV #LV #SN Attr   VSize   VFree
  centos     1   2   0 wz--n- <19.00g    0
  vg_mysql   2   0   0 wz--n-   1.48g 1.48g
[root@centos7 ~]# vgdisplay     #卷组的详细信息
  --- Volume group ---
  VG Name               vg_mysql        #新建的卷组,名称是vg_mysql
  System ID
  Format                lvm2            #版本是lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               1.48 GiB        #卷组总容量大小:379*4M/1024=1.48G
  PE Size               4.00 MiB        #每块物理卷大小
  Total PE              379             #物理卷个数
  Alloc PE / Size       0 / 0           #已分配的物理卷
  Free  PE / Size       379 / 1.48 GiB  #未分配的物理卷
  VG UUID               e2zXZ8-jeGv-MZlU-9NmQ-3roN-B2vX-0sNfTD

  --- Volume group ---
  VG Name               centos      #原系统自带逻辑卷
  System ID
  Format                lvm2
...省略...

4)创建逻辑卷lvcreate
#-n 逻辑卷的名称
#-L 新建的逻辑卷大小,直接输入数值即可
#-l 新建的逻辑卷大小,但是通过PE的数量计算出来的;-l +PE数量
[root@centos7 ~]# lvcreate -n lv_data -L 900M vg_mysql
  Logical volume "lv_data" created.
[root@centos7 ~]# pvdisplay     #查看这900M来自哪个硬盘
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg_mysql
  PV Size               1.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              255         #总的大小
  Free PE               30          #剩余大小,即使用了(255-30)*4M=900M
  Allocated PE          225
  PV UUID               g7QD6p-hpTr-Ha0K-165n-mEqm-NS30-WiBe3t

  --- Physical volume ---
  PV Name               /dev/sdc1
  VG Name               vg_mysql
  PV Size               500.00 MiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              124
  Free PE               124         #未使用的PE
  Allocated PE          0
  PV UUID               b11Tex-iP7p-752f-QJD1-2YU3-sR7H-ujZ0UJ
[root@centos7 ~]# ll /dev/vg_mysql/lv_data
lrwxrwxrwx 1 root root 7 Feb 26 13:44 /dev/vg_mysql/lv_data -> ../dm-2
[root@centos7 ~]# ll /dev/mapper/vg_mysql-lv_data
lrwxrwxrwx 1 root root 7 Feb 26 13:44 /dev/mapper/vg_mysql-lv_data -> ../dm-2
[root@centos7 ~]# lsblk -f
NAME                 FSTYPE      LABEL   UUID                            MOUNTPOINT
sdb
└─sdb1               LVM2_member         g7QD6p-hpTr-Ha0K-165n-mEqm-NS30-WiBe3t
  └─vg_mysql-lv_data
sdc
└─sdc1               LVM2_member         b11Tex-iP7p-752f-QJD1-2YU3-sR7H-ujZ0UJ
[root@centos7 ~]# blkid
/dev/sda1: UUID="4d6ce1ba-16ec-4d37-951c-afd012231267" TYPE="xfs"
/dev/sda2: UUID="H4mKHO-71FU-bAUR-InNX-ji0g-nuN3-BjOQLe" TYPE="LVM2_member"
/dev/sdb1: UUID="g7QD6p-hpTr-Ha0K-165n-mEqm-NS30-WiBe3t" TYPE="LVM2_member"
/dev/sdc1: UUID="b11Tex-iP7p-752f-QJD1-2YU3-sR7H-ujZ0UJ" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="5753dc79-bc4e-4514-9eb7-56e5bbaa5dff" TYPE="xfs"
/dev/mapper/centos-swap: UUID="da97a9bd-58d9-4770-92d8-07b6bd64ac1c" TYPE="swap"

[root@centos7 ~]# lvs
  LV      VG       Attr       LSize
  root    centos   -wi-ao---- <17.00g
  swap    centos   -wi-ao----   2.00g
  lv_data vg_mysql -wi-a----- 900.00m   #新增加的逻辑卷
[root@centos7 ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg_mysql/lv_data
  LV Name                lv_data
  VG Name                vg_mysql
  LV UUID                j1K8fY-2L7S-MXJs-KuJw-5Gnc-tFvh-pI1u3w
  LV Write Access        read/write
  LV Creation host, time centos7, 2021-02-26 13:44:56 +0800
  LV Status              available
  # open                 0
  LV Size                900.00 MiB
  Current LE             225
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

5)格式化为ext4文件系统
[root@centos7 ~]# mkfs.ext4 /dev/vg_mysql/lv_data
[root@centos7 ~]# blkid
/dev/mapper/centos-root: UUID="5753dc79-bc4e-4514-9eb7-56e5bbaa5dff" TYPE="xfs"
/dev/mapper/centos-swap: UUID="da97a9bd-58d9-4770-92d8-07b6bd64ac1c" TYPE="swap"
/dev/mapper/vg_mysql-lv_data: UUID="d23beabb-2845-47cc-b424-0b99179de485" TYPE="ext4"

6)挂载
[root@centos7 ~]# mkdir /mysql/data -p
[root@centos7 ~]# vim /etc/fstab    #添加逻辑卷挂载
[root@centos7 ~]# cat /etc/fstab    
UUID=d23beabb-2845-47cc-b424-0b99179de485 /mysql/data ext4 defaults 0 0
[root@centos7 ~]# mount -a
[root@centos7 ~]# mount
/dev/mapper/vg_mysql-lv_data on /mysql/data type ext4 (rw,relatime,data=ordered)
[root@centos7 ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/vg_mysql-lv_data  870M  2.3M  807M   1% /mysql/data     #新增加的逻辑卷

7)测试
[root@centos7 ~]# cp /etc/redhat-release /mysql/data
[root@centos7 ~]# ll /mysql/data/
-rw-r--r-- 1 root root    37 Feb 26 15:05 redhat-release

8)扩容
#生成文件,模拟磁盘被占满
[root@centos7 ~]# dd if=/dev/zero of=/mysql/data/db1.idb bs=1M count=750
750+0 records in
750+0 records out
786432000 bytes (786 MB) copied, 1.85725 s, 423 MB/s
[root@centos7 ~]# df -Th
Filesystem                   Type      Size  Used Avail Use% Mounted on
/dev/mapper/vg_mysql-lv_data ext4      870M  753M   57M  94% /mysql/data    #已用94%

#查看vgs或vgdisplay有无空余
[root@centos7 ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree
  centos     1   2   0 wz--n- <19.00g      0
  vg_mysql   2   1   0 wz--n-   1.48g 616.00m   #还有600M
[root@centos7 ~]# vgdisplay vg_mysql
  --- Volume group ---
  VG Name               vg_mysql
  System ID
  Format                lvm2
  VG Size               1.48 GiB
  PE Size               4.00 MiB
  Total PE              379
  Alloc PE / Size       225 / 900.00 MiB
  Free  PE / Size       154 / 616.00 MiB    #剩余154个PE,约600多M
  VG UUID               e2zXZ8-jeGv-MZlU-9NmQ-3roN-B2vX-0sNfTD

#全部增加到vg_mysql的lv_data中
[root@centos7 ~]# lvextend -l +100%free /dev/vg_mysql/lv_data
  Size of logical volume vg_mysql/lv_data changed from 900.00 MiB (225 extents) to 1.48 GiB (379 extents).
  Logical volume vg_mysql/lv_data successfully resized.
[root@centos7 ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree
  centos     1   2   0 wz--n- <19.00g    0
  vg_mysql   2   1   0 wz--n-   1.48g    0      #大小为1.48G,无剩余
[root@centos7 ~]# lvs
  LV      VG       Attr       LSize   
  root    centos   -wi-ao---- <17.00g
  swap    centos   -wi-ao----   2.00g
  lv_data vg_mysql -wi-ao----   1.48g       #大小为1.48G
[root@centos7 ~]# vgdisplay
  --- Volume group ---
  VG Name               vg_mysql
  System ID
  Format                lvm2
  VG Size               1.48 GiB
  PE Size               4.00 MiB
  Total PE              379
  Alloc PE / Size       379 / 1.48 GiB      #全部使用
  Free  PE / Size       0 / 0               #无剩余
  VG UUID               e2zXZ8-jeGv-MZlU-9NmQ-3roN-B2vX-0sNfTD

[root@centos7 ~]# df -Th    #但还是未显示全部分区,因为df显示的是已有文件系统的分区
Filesystem                   Type      Size  Used Avail Use% Mounted on
/dev/mapper/vg_mysql-lv_data ext4      870M  753M   57M  94% /mysql/data
[root@centos7 ~]# blkid /dev/vg_mysql/lv_data   #查看逻辑卷的文件类型
/dev/vg_mysql/lv_data: UUID="d23beabb-2845-47cc-b424-0b99179de485" TYPE="ext4"
[root@centos7 ~]# resize2fs /dev/vg_mysql/lv_data   #ext4使用resize2fs来扩容,而xfs需要用xfs_growfs +挂载点来扩容
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg_mysql/lv_data is mounted on /mysql/data; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg_mysql/lv_data is now 388096 blocks long.
[root@centos7 ~]# df -Th
Filesystem                   Type      Size  Used Avail Use% Mounted on
/dev/mapper/vg_mysql-lv_data ext4      1.5G  753M  646M  54% /mysql/data    #扩容成功

9)卷组无空间了,需要增加硬盘分区来从头开始
#增加硬盘分区sdb2
[root@centos7 ~]# echo -e 'n\np\n2\n\n\nt\n2\n8e\nw\n' |fdisk /dev/sdb
[root@centos7 ~]# partprobe
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
[root@centos7 ~]# lsblk
NAME                 MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb                    8:16   0    3G  0 disk
├─sdb1                 8:17   0    1G  0 part
│ └─vg_mysql-lv_data 253:2    0  1.5G  0 lvm  /mysql/data
└─sdb2                 8:18   0    2G  0 part               #增加的sdb2分区
sdc                    8:32   0    2G  0 disk
└─sdc1                 8:33   0  500M  0 part
  └─vg_mysql-lv_data 253:2    0  1.5G  0 lvm  /mysql/data
[root@centos7 ~]# pvs
  PV         VG       Fmt  Attr PSize    PFree
  /dev/sda2  centos   lvm2 a--   <19.00g    0
  /dev/sdb1  vg_mysql lvm2 a--  1020.00m    0
  /dev/sdc1  vg_mysql lvm2 a--   496.00m    0

#创建pv
[root@centos7 ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.
[root@centos7 ~]# pvs
  PV         VG       Fmt  Attr PSize    PFree
  /dev/sda2  centos   lvm2 a--   <19.00g     0
  /dev/sdb1  vg_mysql lvm2 a--  1020.00m     0
  /dev/sdb2           lvm2 ---    <2.00g <2.00g
  /dev/sdc1  vg_mysql lvm2 a--   496.00m     0
[root@centos7 ~]# pvdisplay /dev/sdb*
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg_mysql
  PV Size               1.00 GiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              255
  Free PE               0
  Allocated PE          255
  PV UUID               g7QD6p-hpTr-Ha0K-165n-mEqm-NS30-WiBe3t

  "/dev/sdb2" is a new physical volume of "<2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name
  PV Size               <2.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               RioR0L-k1vG-O6g1-I6lx-zE5M-RuKS-QcybA0
#卷组扩容
[root@centos7 ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree
  centos     1   2   0 wz--n- <19.00g    0
  vg_mysql   2   1   0 wz--n-   1.48g    0      #原有卷组大小为1.48G
[root@centos7 ~]# vgextend vg_mysql /dev/sdb2
  Volume group "vg_mysql" successfully extended
[root@centos7 ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree
  centos     1   2   0 wz--n- <19.00g     0
  vg_mysql   3   1   0 wz--n-  <3.48g <2.00g    #增加了2个G,由3个PV组合而成
[root@centos7 ~]# vgdisplay
  --- Volume group ---
  VG Name               vg_mysql
  System ID
  Format                lvm2
  VG Size               <3.48 GiB
  PE Size               4.00 MiB
  Total PE              890
  Alloc PE / Size       379 / 1.48 GiB
  Free  PE / Size       511 / <2.00 GiB         #剩余空间2G
  VG UUID               e2zXZ8-jeGv-MZlU-9NmQ-3roN-B2vX-0sNfTD

#逻辑卷lv扩容,-r选项可以直接分配文件系统(不管是ext4还是xfs格式)
[root@centos7 ~]# lvextend -r -L +1G /dev/mapper/vg_mysql-lv_data
  Size of logical volume vg_mysql/lv_data changed from 1.48 GiB (379 extents) to 2.48 GiB (635 extents).
  Logical volume vg_mysql/lv_data successfully resized.
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/vg_mysql-lv_data is mounted on /mysql/data; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/vg_mysql-lv_data is now 650240 blocks long.

[root@centos7 ~]# lvs
  LV      VG       Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root    centos   -wi-ao---- <17.00g
  swap    centos   -wi-ao----   2.00g
  lv_data vg_mysql -wi-ao----   2.48g       #增加了1G空间
[root@centos7 ~]# df -Th
Filesystem                   Type      Size  Used Avail Use% Mounted on
/dev/mapper/vg_mysql-lv_data ext4      2.5G  753M  1.6G  32% /mysql/data    #增加了1G空间

[root@centos7 ~]# dd if=/dev/zero of=/test.img bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 37.1566 s, 28.9 MB/s      #这是scsi硬盘的访问速度
[root@centos7 ~]# dd if=/dev/zero of=/mysql/data/test.img bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 2.80475 s, 383 MB/s       #逻辑卷的访问速度还是快

4.2.4 练习

创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小 为16MB,而后在卷组中创建大小为5G的逻辑卷testlv,挂载至/users目录。

1)增加两块硬盘,创建两个PV,一个5G,一个15G
[root@centos7 ~]# echo -e 'n\np\n1\n\n+5G\nt\n8e\nw\n' |fdisk /dev/sdb
[root@centos7 ~]# echo -e 'n\np\n1\n\n+15G\nt\n8e\nw\n' |fdisk /dev/sdc
[root@centos7 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0   11G  0 disk
└─sdb1   8:17   0   5G  0 part
sdc      8:32   0   20G  0 disk
└─sdc1   8:33   0   15G  0 part
[root@centos7 ~]# fdisk -l /dev/sdb /dev/sdc
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   8e  Linux LVM
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    31459327    15728640   8e  Linux LVM

2)创建物理卷
[root@centos7 ~]# pvcreate /dev/sdb1 /dev/sdc1
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.
[root@centos7 ~]# pvs
  PV         VG Fmt  Attr PSize  PFree
  /dev/sdb1     lvm2 ---   5.00g  5.00g
  /dev/sdc1     lvm2 ---  15.00g 15.00g

[root@centos7 ~]# pvdisplay
  "/dev/sdb1" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               7Xgssi-Ie58-HcMG-3i9X-23Di-ZDib-CGsrOM

  "/dev/sdc1" is a new physical volume of "15.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name
  PV Size               15.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               XccpbM-h5Ak-cigM-e65D-tKyY-RteA-LOCE70

3)创建卷组
[root@centos7 ~]# vgcreate testvg /dev/sdb1 /dev/sdc1 -s 16M
  Volume group "testvg" successfully created
[root@centos7 ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  testvg   2   0   0 wz--n- <19.97g <19.97g
[root@centos7 ~]# vgdisplay
  --- Volume group ---
  VG Name               testvg
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <19.97 GiB
  PE Size               16.00 MiB
  Total PE              1278
  Alloc PE / Size       0 / 0
  Free  PE / Size       1278 / <19.97 GiB
  VG UUID               GK4k4b-cgLJ-grqu-Y2NG-Kteq-nGEP-zMDqSd
[root@centos7 ~]# blkid
/dev/sdb1: UUID="7Xgssi-Ie58-HcMG-3i9X-23Di-ZDib-CGsrOM" TYPE="LVM2_member"
/dev/sdc1: UUID="XccpbM-h5Ak-cigM-e65D-tKyY-RteA-LOCE70" TYPE="LVM2_member"

4)创建逻辑卷
[root@centos7 ~]# lvcreate -n testlv -L +5G testvg
  Logical volume "testlv" created.
[root@centos7 ~]# lvs
  LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-a----- 5.00g
[root@centos7 ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                E1G8Jt-bmvN-8FsF-wagk-Q1SJ-ahU6-RSNNjT
  LV Write Access        read/write
  LV Creation host, time centos7, 2021-02-26 21:15:17 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             320
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

5)创建文件系统
[root@centos7 ~]# mkfs.ext4 /dev/testvg/testlv
[root@centos7 ~]# blkid
/dev/sdb1: UUID="7Xgssi-Ie58-HcMG-3i9X-23Di-ZDib-CGsrOM" TYPE="LVM2_member"
/dev/sdc1: UUID="XccpbM-h5Ak-cigM-e65D-tKyY-RteA-LOCE70" TYPE="LVM2_member"
/dev/mapper/testvg-testlv: UUID="c4e19a24-d10a-4f42-927a-0bdf3a0440c8" TYPE="ext4"

6)挂载
[root@centos7 ~]# mkdir /users
[root@centos7 ~]# vim /etc/fstab
[root@centos7 ~]# cat /etc/fstab
UUID=c4e19a24-d10a-4f42-927a-0bdf3a0440c8 /users       ext4    defaults        0 0
[root@centos7 ~]# mount -a
[root@centos7 ~]# mount
/dev/mapper/testvg-testlv on /users type ext4 (rw,relatime,data=ordered)
[root@centos7 ~]# df -Th
Filesystem                Type      Size  Used Avail Use% Mounted on
/dev/mapper/testvg-testlv ext4      4.8G   20M  4.6G   1% /users

猜你喜欢

转载自blog.51cto.com/puppydong/2642062