1、MBR分区表
1.1 恢复有备份的分区表
初始化服务器:先备份centos8系统(192.168.209.110)上的/dev/sda的MBR分区表,破坏后,通过备份文件恢复。
1)查看110主机的/dev/sda分区表前512字节;
2)备份110主机的/dev/sda分区表的64个字节,并备份到111主机上的/data目录中;
3)破坏掉110主机上的/dev/sda分区表,并重启系统;
4)重启后不能正常进入系统;
5)虚拟机里设置centos8光盘镜像;
6)设置光盘启动;
7)选择Troubleshooting模式;
8)选择Rescue a CentOS Linux system;
9)选择3 Skip to shell;
10)进入系统后,查看没有ip地址
11)配置IP地址,使用ip a 或ifconfig命令
12)将209.111备份的sda.img文件复制过来
13)导入sda.img到/dev/sda分区的64字节
4)重启后正常
1.2 恢复无备份的分区表
初始化服务器:未备份centos8系统(192.168.209.110)上的/dev/sda的MBR分区表,被破坏后,通过其他相同配置的服务器(209.111)分区表来恢复。
1)跳过/dev/sda分区表的446字节,查看后面的66字节
2)跳过/dev/sda分区表的446字节,破坏后面的64字节
3)启动后无法进入系统
4)开机按ESC键,选择光盘启动
5)选择Troubleshooting模式
6)选择Rescue a CentOS Linux system
7)选择3 Skip to shell
8)配置IP地址,使用ip a 或ifconfig命令
9)在209.111服务器上备份其分区表的后64字节
10)复制209.111服务器上的分区表备份sda111.img到本地服务器(209.110)
11)写入到209.110服务器的分区表中,重启后正常
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+
3.2.2 RAID-1
RAID 1 磁盘镜像盘 --- 数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件。
mirroring(镜 像卷),至少需要两块硬盘,raid大小等于两个raid分区中最小的容量(最好将分区大小分为一样),可增加热备盘提供一定的备份能力;
数据有冗余,在存储时同时写入两块硬盘,实现了数据备份;
但相对降低了写入性能,但是读取数据时可以并发,几乎类似于raid-0的读取效率;
- 读性能提升、写性能略有下降
- 可用空间:1*min(S1,S2,...)---即50%
- 有冗余能力
- 最少磁盘数:2, 2N
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+
3.2.5 RAID-6
RAID 6 带有两种分布存储的奇偶校验码的独立磁盘结构
- 读、写性能提升
- 可用空间:(N-2)*min(S1,S2,...)----即(n-2)/n
- 有容错能力:允许最多2块磁盘损坏
- 最少磁盘数:4, 4+
3.2.6 RAID-10
高可靠性与高效磁盘结构
- 读、写性能提升
- 可用空间:N*min(S1,S2,...)/2,只有50%磁盘利用率
- 有容错能力:每组镜像最多只能坏一块
- 最少磁盘数:4, 4+
3.2.7 RAID-01
多块磁盘先实现RAID0,再组合成RAID1,也只有50%磁盘利用率
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
常见 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