1、创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录
新添加的硬盘要进行扫描
alias scandisk='
echo - - - > /sys/class/scsi_host/host0/scan;
echo - - - > /sys/class/scsi_host/host1/scan;
echo - - - > /sys/class/scsi_host/host2/scan'
# 创建两个物理卷(PV),假设为 /dev/sdb 和 /dev/sdc,每个 10G
pvcreate /dev/sdb /dev/sdc
# 创建大小为20G、PE为16MB的卷组testvg
vgcreate -s 16M testvg /dev/sdb /dev/sdc
# 在testvg中创建大小为5G的逻辑卷testlv
lvcreate -L 5G -n testlv testvg
# 格式化逻辑卷为ext4文件系统
mkfs.ext4 /dev/testvg/testlv
# 挂载至/users目录
mkdir -p /users
mount /dev/testvg/testlv /users
# 添加开机自动挂载
echo '/dev/testvg/testlv /users ext4 defaults 0 0' >> /etc/fstab
或者
修改/etc/fstab
UUID=c2835ed7-1095-40e6-9364-da6629c3ee53 /users ext4 defaults 0 0
注意:uuid用blkid查看就可以了
2、 新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录
# 新建用户archlinux,并设置家目录为/users/archlinux
useradd -d /users/archlinux archlinux
# 设置家目录权限
chown -R archlinux:archlinux /users/archlinux
# 切换至archlinux用户并复制/etc/pam.d目录至自己的家目录
su - archlinux
cp -r /etc/pam.d /users/archlinux/
exit # 退出到root用户
、
3、扩展testlv至7G,要求archlinux用户的文件不能丢失
# 扩展逻辑卷至7G
lvextend -L +2G /dev/testvg/testlv
# 调整文件系统大小以适应新的逻辑卷大小
resize2fs /dev/testvg/testlv
4、收缩testlv至3G,要求archlinux用户的文件不能丢失
收缩要先备份 生产环境中数据是最重要的
# 卸载逻辑卷
umount /users
# 查看当前文件系统的使用情况,确认其大小小于3G
df -h /users
# 缩小逻辑卷,这里假设已确认可以安全缩小至3G
lvreduce -L 3G /dev/testvg/testlv
# 调整文件系统大小
resize2fs /dev/testvg/testlv
# 重新挂载逻辑卷
mount /dev/testvg/testlv /users
5、对testlv创建快照,并尝试基于快照备份数据,验证快照的功能
# 创建testlv的快照,这里假设命名为snap_testlv
lvcreate -L 1G -s -n snap_testlv /dev/testvg/testlv
# 挂载快照到一个临时目录,如 /mnt/snapshot
mkdir /mnt/snapshot
mount /dev/testvg/snap_testlv /mnt/snapshot
# 复制部分或全部数据进行备份验证
cp -r /mnt/snapshot/* /path/to/backup/
没有这个这个目录就是创建一个目录
#mkdir -p /path/to/backup
# 卸载快照
umount /mnt/snapshot
1、创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项
在Linux中,要创建一个满足条件的文件系统并设置自动挂载,可以按照以下步骤操作:
1. 首先,确保你有一个未使用的分区(如 `/dev/sdb1`)可用于创建新的文件系统。这里假设你有一个这样的分区。
2. 创建一个2GB大小、块大小为2048字节、预留1%可用空间的ext4文件系统,并设置卷标为TEST:
```bash
mkfs.ext4 -m 1 -b 2048 -L TEST /dev/sdb1
```
3. 创建挂载点目录并挂载新创建的文件系统:
```bash
mkdir -p /test
mount /dev/sdb1 /test
```
4. 在`/etc/fstab`中添加一行,使得系统在开机时自动挂载此分区,并启用acl挂载选项:
```bash
echo '/dev/sdb1 /test ext4 defaults,acl 0 0' >> /etc/fstab
```
请确保将 `/dev/sdb1` 替换成你实际要用的磁盘分区,同时,上述操作需要root权限执行。在真实环境下,你需要预先规划好磁盘分区,并确保所选分区有足够的空间来创建一个2GB的文件系统。
2、写一个脚本,完成如下功能:
(1) 列出当前系统识别到的所有磁盘设备
# 列出所有磁盘设备
lsblk -d
lsblk -d > disks.txt
(2) 如磁盘数量为1,则显示其空间使用信息否则,则显示最后一个磁盘上的空间使用信息
如果你想以不同的方式重写提供的命令,以便获取最后一个非循环(loop)和非内存(ram)设备的磁盘空间使用情况,这里有几个选项。这些命令都使用了不同的命令组合和工具来达到相同的目的。
方法一:使用awk替代grep和tail
bash
last_disk=$(lsblk -dno NAME | awk '/^[^ ]+[^ ]+$/ {print; exit}')
df -h "/dev/$last_disk"
这个命令使用awk来查找最后一行,该行只包含一个字段(即磁盘名),并且该字段不包含空格。当找到这样的行时,awk会打印它并退出。
方法二:使用tail和rev结合
bash
last_disk=$(lsblk -dno NAME | grep -vE '^loop|^ram' | tail -n1 | rev | cut -d' ' -f1 | rev)
df -h "/dev/$last_disk"
这个命令与先前提供的方法三类似,但是使用了grep来过滤掉循环和内存设备。
解释
这个命令的目的是列出系统中所有的磁盘设备,排除掉循环设备(通常以loop开头)和RAM设备(通常以ram开头),然后获取最后一个磁盘设备的名称,并显示该设备的磁盘空间使用情况。
命令的详细解释如下:
lsblk -dno NAME:lsblk命令用于列出所有可用的块设备。选项-d表示仅显示物理设备(不包括分区、挂载点等),-n表示不解析主机名(使输出更快),-o NAME表示仅输出设备名称。
grep -vE '^loop|^ram':grep命令用于过滤输出。选项-v表示反向匹配,即不匹配指定模式的行;-E表示使用扩展正则表达式。这个命令过滤掉所有以loop或ram开头的行。
tail -n1:tail命令用于输出文件的最后几行。选项-n1表示只输出最后一行。
rev:rev命令用于将输入的行逐字符反转。
cut -d' ' -f1:cut命令用于按列切割文本。选项-d' '设置空格为分隔符,-f1表示只输出第一列。
再次使用rev:由于之前使用了rev命令,这里需要再次使用rev将设备名称恢复为原始顺序。
df -h "/dev/$last_disk":df命令用于显示磁盘空间使用情况。选项-h表示以人类可读的格式(如KB、MB、GB)显示。"/dev/$last_disk"是df命令的参数,表示要显示空间使用情况的磁盘设备路径。这里使用了之前命令的输出结果$last_disk作为变量。
注意:在实际使用时,请确保命令中的空格和引号都是正确的,因为错误的空格或引号可能导致命令无法正确执行。另外,这个命令假设系统中只有一个以loop或ram开头的设备,如果有多个这样的设备,grep命令会过滤掉所有这些设备。如果系统中没有这样的设备,grep命令会输出所有设备,然后tail -n1会取最后一个设备。
方法三:使用head替代tail
bash
last_disk=$(lsblk -dno NAME | grep -vE '^loop|^ram' | head -n -1 | tail -n 1)
df -h "/dev/$last_disk"
这个命令使用head来排除第一行(通常是系统的总线或其他信息),然后使用tail来获取最后一行。
方法四:使用perl
bash
last_disk=$(lsblk -dno NAME | perl -lane '$F = split / +/, $F[0]; print $F[0] and last if $F[0] !~ /loop|ram/;' | tail -n 1)
df -h "/dev/$last_disk"
这个命令使用perl来处理lsblk的输出。它分割每行的第一个字段,并检查该字段是否不包含"loop"或"ram"。如果找到这样的行,它就打印出来并退出。
在所有这些方法中,请确保你使用的系统上有这些工具(如awk、grep、tail、head、rev、perl等)。大多数Linux发行版都预装了这些工具,但如果你在一个受限的环境中工作,某些工具可能不可用。
1:创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录
2:创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录
备份MBR的分区表,并破坏后恢复
#备份MBR分区表
[root@centos8 ~]#dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446
[root@centos8 ~]#scp /data/dpt.img 10.0.0.102:
#破坏MBR分区表
[root@centos8 ~]#dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446
#无法启动
[root@centos8 ~]#reboot
#用光盘启动,进入rescue mode,选第3项skip to shell
#配置网络
#ifconfig ens160 10.0.0.8/24
#ip a a 10.0.0.8/24 dev ens160
#scp 10.0.0.102:/root/dpt.img .
#恢复MBR分区表
#dd if=dpt.img of=/dev/sda bs=1 seek=446
#reboot
具体操作细节
[11:47:20 root@localhost ~][#dd if=/dev/nvme0n1 of=/data/dpt.img bs=1 count=64 skip=446
64+0 records in
64+0 records out
64 bytes copied, 0.000214136 s, 299 kB/s
[11:48:46 root@localhost ~][#scp /data/dpt.img 10.0.0.132
[11:49:30 root@localhost ~][#dd if=/dev/zero of=/dev/nvme0n1 bs=1 count=64 seek=446
64+0 records in
64+0 records out
64 bytes copied, 0.000162518 s, 394 kB/s
[11:50:28 root@localhost ~][#reboot
[11:50:42 root@localhost ~][#Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(rocky(root)) at 19:50:42.
Type `help' to learn how to use Xshell prompt.
[C:\~]$
Connecting to 10.0.0.133:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Fri Feb 23 06:59:22 2024 from 10.0.0.1
[root@localhost ~]# dd if=/dev/nvme0n1 of=mbr bs=1 count=64 skip=446
64+0 records in
64+0 records out
64 bytes copied, 0.000164651 s, 389 kB/s
[root@localhost ~]# ll mbr
-rw-r--r--. 1 root root 64 Feb 26 12:07 mbr
[root@localhost ~]# hexdump -C mbr
00000000 80 04 01 04 83 fe c2 ff 00 08 00 00 00 00 20 00 |.............. .|
00000010 00 fe c2 ff 8e fe c2 ff 00 08 20 00 00 f8 df 18 |.......... .....|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000040
[root@localhost ~]# dd if=/dev/zero of=/dev/nvme0n1 bs=1 count=64 seek=446
64+0 records in
64+0 records out
64 bytes copied, 0.000216824 s, 295 kB/s
[root@localhost ~]# hexdump -C -n 512 /dev/nvme0n1
00000000 eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |.c..............|
00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..|
00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u|
00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..|
00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........|
00000050 00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 00 |................|
00000060 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70 |...........t...p|
00000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc |t....y|..1......|
00000080 00 20 fb a0 64 7c 3c ff 74 02 88 c2 52 be 80 7d |. ..d|<.t...R..}|
00000090 e8 17 01 be 05 7c b4 41 bb aa 55 cd 13 5a 52 72 |.....|.A..U..ZRr|
000000a0 3d 81 fb 55 aa 75 37 83 e1 01 74 32 31 c0 89 44 |=..U.u7...t21..D|
000000b0 04 40 88 44 ff 89 44 02 c7 04 10 00 66 8b 1e 5c |.@.D..D.....f..\|
000000c0 7c 66 89 5c 08 66 8b 1e 60 7c 66 89 5c 0c c7 44 ||f.\.f..`|f.\..D|
000000d0 06 00 70 b4 42 cd 13 72 05 bb 00 70 eb 76 b4 08 |..p.B..r...p.v..|
000000e0 cd 13 73 0d 5a 84 d2 0f 83 d8 00 be 8b 7d e9 82 |..s.Z........}..|
000000f0 00 66 0f b6 c6 88 64 ff 40 66 89 44 04 0f b6 d1 |.f....d.@f.D....|
00000100 c1 e2 02 88 e8 88 f4 40 89 44 08 0f b6 c2 c0 e8 |.......@.D......|
00000110 02 66 89 04 66 a1 60 7c 66 09 c0 75 4e 66 a1 5c |.f..f.`|f..uNf.\|
00000120 7c 66 31 d2 66 f7 34 88 d1 31 d2 66 f7 74 04 3b ||f1.f.4..1.f.t.;|
00000130 44 08 7d 37 fe c1 88 c5 30 c0 c1 e8 02 08 c1 88 |D.}7....0.......|
00000140 d0 5a 88 c6 bb 00 70 8e c3 31 db b8 01 02 cd 13 |.Z....p..1......|
00000150 72 1e 8c c3 60 1e b9 00 01 8e db 31 f6 bf 00 80 |r...`......1....|
00000160 8e c6 fc f3 a5 1f 61 ff 26 5a 7c be 86 7d eb 03 |......a.&Z|..}..|
00000170 be 95 7d e8 34 00 be 9a 7d e8 2e 00 cd 18 eb fe |..}.4...}.......|
00000180 47 52 55 42 20 00 47 65 6f 6d 00 48 61 72 64 20 |GRUB .Geom.Hard |
00000190 44 69 73 6b 00 52 65 61 64 00 20 45 72 72 6f 72 |Disk.Read. Error|
000001a0 0d 0a 00 bb 01 00 b4 0e cd 10 ac 3c 00 75 f4 c3 |...........<.u..|
000001b0 00 00 00 00 00 00 00 00 fa b6 3e 2a 00 00 00 00 |..........>*....|
000001c0 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@localhost ~]# hexdump -C -n 512 /dev/nvme0n1 -v
00000000 eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |.c..............|
00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..|
00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u|
00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..|
00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........|
00000050 00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 00 |................|
00000060 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70 |...........t...p|
00000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc |t....y|..1......|
00000080 00 20 fb a0 64 7c 3c ff 74 02 88 c2 52 be 80 7d |. ..d|<.t...R..}|
00000090 e8 17 01 be 05 7c b4 41 bb aa 55 cd 13 5a 52 72 |.....|.A..U..ZRr|
000000a0 3d 81 fb 55 aa 75 37 83 e1 01 74 32 31 c0 89 44 |=..U.u7...t21..D|
000000b0 04 40 88 44 ff 89 44 02 c7 04 10 00 66 8b 1e 5c |.@.D..D.....f..\|
000000c0 7c 66 89 5c 08 66 8b 1e 60 7c 66 89 5c 0c c7 44 ||f.\.f..`|f.\..D|
000000d0 06 00 70 b4 42 cd 13 72 05 bb 00 70 eb 76 b4 08 |..p.B..r...p.v..|
000000e0 cd 13 73 0d 5a 84 d2 0f 83 d8 00 be 8b 7d e9 82 |..s.Z........}..|
000000f0 00 66 0f b6 c6 88 64 ff 40 66 89 44 04 0f b6 d1 |.f....d.@f.D....|
00000100 c1 e2 02 88 e8 88 f4 40 89 44 08 0f b6 c2 c0 e8 |.......@.D......|
00000110 02 66 89 04 66 a1 60 7c 66 09 c0 75 4e 66 a1 5c |.f..f.`|f..uNf.\|
00000120 7c 66 31 d2 66 f7 34 88 d1 31 d2 66 f7 74 04 3b ||f1.f.4..1.f.t.;|
00000130 44 08 7d 37 fe c1 88 c5 30 c0 c1 e8 02 08 c1 88 |D.}7....0.......|
00000140 d0 5a 88 c6 bb 00 70 8e c3 31 db b8 01 02 cd 13 |.Z....p..1......|
00000150 72 1e 8c c3 60 1e b9 00 01 8e db 31 f6 bf 00 80 |r...`......1....|
00000160 8e c6 fc f3 a5 1f 61 ff 26 5a 7c be 86 7d eb 03 |......a.&Z|..}..|
00000170 be 95 7d e8 34 00 be 9a 7d e8 2e 00 cd 18 eb fe |..}.4...}.......|
00000180 47 52 55 42 20 00 47 65 6f 6d 00 48 61 72 64 20 |GRUB .Geom.Hard |
00000190 44 69 73 6b 00 52 65 61 64 00 20 45 72 72 6f 72 |Disk.Read. Error|
000001a0 0d 0a 00 bb 01 00 b4 0e cd 10 ac 3c 00 75 f4 c3 |...........<.u..|
000001b0 00 00 00 00 00 00 00 00 fa b6 3e 2a 00 00 00 00 |..........>*....|
000001c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001e0 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@localhost ~]# ls
anaconda-ks.cfg mbr
[root@localhost ~]# scp mbr 10.0.0.132:
The authenticity of host '10.0.0.132 (10.0.0.132)' can't be established.
ED25519 key fingerprint is SHA256:09pUIne7s/8+FxKEZIDDYxcnm6Ecpe3Tn+Xjk6RBf4Q.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: y
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added '10.0.0.132' (ED25519) to the list of known hosts.
root@10.0.0.132's password:
Permission denied, please try again.
root@10.0.0.132's password:
mbr 100% 64 162.5KB/s 00:00
下一步就是重启了
如图
GRUB loading
welcome to GRUB!
error : ../../grub-core/kern/disk.c:258:no such partition
entering rescue mode...
尼玛,终于进去了,这个位置要注意,选择重新启动时,看到系统启动进步条,只有0.5秒的时间,快速按下esc按键,只按一次,按多次是没有用的,按多次等于自动取消了,等于没按,我试了好久。后面又转换思路,用u盘启动也可以,u盘自己提前做好启动盘 ,注意u盘的镜像包要和自己的系统版本对上,所以,万事都要备份的
如下图
配置命令
#用光盘启动,进入rescue mode,选第3项skip to shell
#配置网络
#ifconfig ens160 10.0.0.8/24
#ip a a 10.0.0.8/24 dev ens160
#scp 10.0.0.102:/root/dpt.img #这里的dpt.img 就是你的文件 注意不能错,不然无法执行命令
.
#恢复MBR分区表
#dd if=dpt.img of=/dev/sda bs=1 seek=446
#reboot
结果
恢复成功
增加新硬盘-让内核发现新硬盘
echo '- - -' > /sys/class/scsi_host/host0|1|2/scan
alias scandisk='
echo - - - > /sys/class/scsi_host/host0/scan;
echo - - - > /sys/class/scsi_host/host1/scan;
echo - - - > /sys/class/scsi_host/host2/scan'
效果
我增加了一个20gb的磁盘,我不想重启,所以用这个命令让他扫描新磁盘
其中如果命令不对,可以直接用tab键查看
[17:18:11 root@centos8[ ~]#echo '- - -' > /sys/class/scsi_host/host0/scan
[17:18:26 root@centos8[ ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part [SWAP]
sr0 11:0 1 7G 0 rom
[17:18:39 root@centos8[ ~]#echo '- - -' > /sys/class/scsi_host/host1/scan
[17:18:50 root@centos8[ ~]#echo '-
[17:18:57 root@centos8[ ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part [SWAP]
sr0 11:0 1 7G 0 rom
[17:18:59 root@centos8[ ~]#echo '- - -' > /sys/class/scsi_host/host2/scan
[17:19:10 root@centos8[ ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part [SWAP]
sdb 8:16 0 20G 0 disk
sr0 11:0 1 7G 0 rom
[17:19:14 root@centos8[ ~]#
增加新硬盘,然后分区
命令
echo '- - -' > /sys/class/scsi_host/host2/scan
lsblk
fdisk /dev/sdc
效果:
17:43:47 root@centos8[ ~]#echo '- - -' > /sys/class/scsi_host/host2/scan
[17:43:55 root@centos8[ ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part [SWAP]
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 1G 0 part
├─sdb2 8:18 0 512B 0 part
├─sdb3 8:19 0 19G 0 part
└─sdb4 8:20 0 1023.5K 0 part
sdc 8:32 0 50G 0 disk
sr0 11:0 1 7G 0 rom
[17:43:59 root@centos8[ ~]#fdisk /dev/sdc
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x84eeafd8.
Command (m for help): m
Help:
DOS (MBR)
a toggle a bootable flag
b edit nested BSD disklabel
c toggle the dos compatibility flag
Generic
d delete a partition
F list free unpartitioned space
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
i print information about a partition
Misc
m print this menu
u change display/entry units
x extra functionality (experts only)
Script
I load disk layout from sfdisk script file
O dump disk layout to sfdisk script file
Save & Exit
w write table to disk and exit
q quit without saving changes
Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty DOS partition table
s create a new empty Sun partition table
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-104857599, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-104857599, default 104857599): +1G
Created a new partition 1 of type 'Linux' and of size 1 GiB.
Command (m for help): m
Help:
DOS (MBR)
a toggle a bootable flag
b edit nested BSD disklabel
c toggle the dos compatibility flag
Generic
d delete a partition
F list free unpartitioned space
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
i print information about a partition
Misc
m print this menu
u change display/entry units
x extra functionality (experts only)
Script
I load disk layout from sfdisk script file
O dump disk layout to sfdisk script file
Save & Exit
w write table to disk and exit
q quit without saving changes
Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty DOS partition table
s create a new empty Sun partition table
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): e
Partition number (2-4, default 2): 2
First sector (2099200-104857599, default 2099200):
Last sector, +sectors or +size{K,M,G,T,P} (2099200-104857599, default 104857599):
Created a new partition 2 of type 'Extended' and of size 49 GiB.
Command (m for help): p
Disk /dev/sdc: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x84eeafd8
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 2099199 2097152 1G 83 Linux
/dev/sdc2 2099200 104857599 102758400 49G 5 Extended
Command (m for help): m
Help:
DOS (MBR)
a toggle a bootable flag
b edit nested BSD disklabel
c toggle the dos compatibility flag
Generic
d delete a partition
F list free unpartitioned space
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
i print information about a partition
Misc
m print this menu
u change display/entry units
x extra functionality (experts only)
Script
I load disk layout from sfdisk script file
O dump disk layout to sfdisk script file
Save & Exit
w write table to disk and exit
q quit without saving changes
Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty DOS partition table
s create a new empty Sun partition table
Command (m for help): m
Help:
DOS (MBR)
a toggle a bootable flag
b edit nested BSD disklabel
c toggle the dos compatibility flag
Generic
d delete a partition
F list free unpartitioned space
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
i print information about a partition
Misc
m print this menu
u change display/entry units
x extra functionality (experts only)
Script
I load disk layout from sfdisk script file
O dump disk layout to sfdisk script file
Save & Exit
w write table to disk and exit
q quit without saving changes
Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty DOS partition table
s create a new empty Sun partition table
Command (m for help): n
All space for primary partitions is in use.
Adding logical partition 5
First sector (2101248-104857599, default 2101248): p
Value out of range.
First sector (2101248-104857599, default 2101248): w
Value out of range.
First sector (2101248-104857599, default 2101248):
Last sector, +sectors or +size{K,M,G,T,P} (2101248-104857599, default 104857599):
Created a new partition 5 of type 'Linux' and of size 49 GiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[17:45:43 root@centos8[ ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part [SWAP]
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 1G 0 part
├─sdb2 8:18 0 512B 0 part
├─sdb3 8:19 0 19G 0 part
└─sdb4 8:20 0 1023.5K 0 part
sdc 8:32 0 50G 0 disk
├─sdc1 8:33 0 1G 0 part
├─sdc2 8:34 0 1K 0 part
└─sdc5 8:37 0 49G 0 part
sr0 11:0 1 7G 0 rom
增加完分区之后,要同步一下
centos7/8同步分区
命令
partprobe
[17:47:58 root@centos8[ ~]#partprobe
Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only.
[17:48:05 root@centos8[ ~]#
管理文件系统
mkfs.ext4|sfs
tune2fs管理ext
xfs_info查看xfs文件系统
fsck.xfs|ext4------文件系统修复和检测
实例
[18:21:50 root@centos8[ ~]#fsck.ext4 /dev/sdb3
e2fsck 1.44.6 (5-Mar-2019)
/dev/sdb3: clean, 11/1245184 files, 122210/4980219 blocks
#clean状态就是没有问题
linux的文件系统损坏会导致linux不正常关机,出错的时候如果系统告诉你是哪一块硬盘的分区有问题,比如是/dev/hda2,接着用如下的命令去对付它:
-y /dev/hda2
结束后使用reboot命令重启系统这样就好了!
如果不知道时哪个地方出了问题,可以直接:
fsck
在随后的多个确认对话框中输入:y
结束后同样使用reboot命令重启系统这样就好了!
挂载
同一个设备可以同时挂载到多个挂载点
一个挂载点不能同时挂载多个设备
挂载规则:
一个挂载点同一时间只能挂载一个设备
一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
一个设备可以同时挂载到多个挂载点
通常挂载点一般是已存在空的目录
范例
实例
mount -t auto /dev/cdrom /mnt/cdrom
mount: mount point /mnt/cdrom does not exist /mnt/cdrom目录不存在,需要先创建。
cd /mnt
-bash: cd: /mnt: No such file or directory
mkdir -p /mnt/cdrom 创建/mnt/cdrom目录
ls
bin dev home lib media mnt proc sbin srv tmp var
boot etc initrd lost+found misc opt root selinux sys usr
mount -t auto /dev/cdrom /mnt/cdrom 挂载cdrom
mount: block device /dev/cdrom is write-protected, mounting read-only 挂载成功
ll /mnt/cdrom 查看cdrom里面内容
total 859
dr-xr-xr-x 4 root root 2048 Sep 4 2005 CentOS
-r--r--r-- 2 root root 8859 Mar 19 2005 centosdocs-man.css
-r--r--r-- 9 root root 18009 Mar 1 2005 GPL
dr-xr-xr-x 2 root root 241664 May 7 02:32 headers
dr-xr-xr-x 4 root root 2048 May 7 02:23 images
dr-xr-xr-x 2 root root 4096 May 7 02:23 isolinux
dr-xr-xr-x 2 root root 18432 May 2 18:50 NOTES
-r--r--r-- 2 root root 5443 May 7 01:49 RELEASE-NOTES-en.html
dr-xr-xr-x 2 root root 2048 May 7 02:34 repodata
-r--r--r-- 9 root root 1795 Mar 1 2005 rpm-GPG-KEY
-r--r--r-- 2 root root 1795 Mar 1 2005 RPM-GPG-KEY-centos4
-r--r--r-- 1 root root 571730 May 7 01:39 yumgroups.xml
增加硬盘--分区--管理创建文件系统--挂载--
具体流程
fdisk命令用于观察硬盘实体使用情况,也可对硬盘分区。它采用传统的问答式界面,而非类似DOS fdisk的cfdisk互动式操作界面,因此在使用上较为不便,但功能却丝毫不打折扣。
语法
fdisk(选项)(参数)
选项
-b<分区大小>:指定每个分区的大小;
-l:列出指定的外围设备的分区表状况;
-s<分区编号>:将指定的分区大小输出到标准输出上,单位为区块;
-u:搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址;
-v:显示版本信息。
参数
设备文件:指定要进行分区或者显示分区的硬盘设备文件。
实例
首先选择要进行操作的磁盘:
[root@localhost ~]# fdisk /dev/sdb
输入m列出可以执行的命令:
command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
输入p列出磁盘目前的分区情况:
Command (m for help): p
Disk /dev/sdb: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 1 8001 8e Linux LVM
/dev/sdb2 2 26 200812+ 83 Linux
输入d然后选择分区,删除现有分区:
Command (m for help): d
Partition number (1-4): 1
Command (m for help): d
Selected partition 2
查看分区情况,确认分区已经删除:
Command (m for help): print
Disk /dev/sdb: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
Command (m for help):
输入n建立新的磁盘分区,首先建立两个主磁盘分区:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p //建立主分区
Partition number (1-4): 1 //分区号
First cylinder (1-391, default 1): //分区起始位置
Using default value 1
last cylinder or +size or +sizeM or +sizeK (1-391, default 391): 100 //分区结束位置,单位为扇区
Command (m for help): n //再建立一个分区
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2 //分区号为2
First cylinder (101-391, default 101):
Using default value 101
Last cylinder or +size or +sizeM or +sizeK (101-391, default 391): +200M //分区结束位置,单位为M
确认分区建立成功:
Command (m for help): p
Disk /dev/sdb: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 100 803218+ 83 Linux
/dev/sdb2 101 125 200812+ 83 Linux
再建立一个逻辑分区:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e //选择扩展分区
Partition number (1-4): 3
First cylinder (126-391, default 126):
Using default value 126
Last cylinder or +size or +sizeM or +sizeK (126-391, default 391):
Using default value 391
确认扩展分区建立成功:
Command (m for help): p
Disk /dev/sdb: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 100 803218+ 83 Linux
/dev/sdb2 101 125 200812+ 83 Linux
/dev/sdb3 126 391 2136645 5 Extended
在扩展分区上建立两个逻辑分区:
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l //选择逻辑分区
First cylinder (126-391, default 126):
Using default value 126
Last cylinder or +size or +sizeM or +sizeK (126-391, default 391): +400M
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (176-391, default 176):
Using default value 176
Last cylinder or +size or +sizeM or +sizeK (176-391, default 391):
Using default value 391
确认逻辑分区建立成功:
Command (m for help): p
Disk /dev/sdb: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 100 803218+ 83 Linux
/dev/sdb2 101 125 200812+ 83 Linux
/dev/sdb3 126 391 2136645 5 Extended
/dev/sdb5 126 175 401593+ 83 Linux
/dev/sdb6 176 391 1734988+ 83 Linux
Command (m for help):
从上面的结果我们可以看到,在硬盘sdb我们建立了2个主分区(sdb1,sdb2),1个扩展分区(sdb3),2个逻辑分区(sdb5,sdb6)
注意:主分区和扩展分区的磁盘号位1-4,也就是说最多有4个主分区或者扩展分区,逻辑分区开始的磁盘号为5,因此在这个实验中试没有sdb4的。
最后对分区操作进行保存:
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
建立好分区之后我们还需要对分区进行格式化才能在系统中使用磁盘。
在sdb1上建立ext2分区:
[root@localhost ~]# mkfs.ext2 /dev/sdb1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
100576 inodes, 200804 blocks
10040 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=209715200
7 block groups
32768 blocks per group, 32768 fragments per group
14368 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
在sdb6上建立ext3分区:
[root@localhost ~]# mkfs.ext3 /dev/sdb6
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
217280 inodes, 433747 blocks
21687 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=444596224
14 block groups
32768 blocks per group, 32768 fragments per group
15520 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]#
建立两个目录/oracle和/web,将新建好的两个分区挂载到系统:
[root@localhost ~]# mkdir /oracle
[root@localhost ~]# mkdir /web
[root@localhost ~]# mount /dev/sdb1 /oracle
[root@localhost ~]# mount /dev/sdb6 /web
查看分区挂载情况:
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
6.7G 2.8G 3.6G 44% /
/dev/sda1 99M 12M 82M 13% /boot
tmpfs 125M 0 125M 0% /dev/shm
/dev/sdb1 773M 808K 733M 1% /oracle
/dev/sdb6 1.7G 35M 1.6G 3% /web
如果需要每次开机自动挂载则需要修改/etc/fstab文件,加入两行配置:
[root@localhost ~]# vim /etc/fstab
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
/dev/sdb1 /oracle ext2 defaults 0 0
/dev/sdb6 /web ext3 defaults 0 0
如何想实现永久挂载?
命令
vim /etc/fstab
打开是这个样子的
#
# /etc/fstab
# Created by anaconda on Sat Jan 13 04:36:12 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=26f3bfe7-485b-4f12-91dc-b0966af358e1 / xfs defaults 0 0
UUID=637e2d09-6947-4148-abcc-dc2a09d5396b /boot ext4 defaults 1 2
UUID=03c085ec-ad1f-4aef-a46b-ad3dce49b3cb /data xfs defaults 0 0
UUID=acdbc962-14c9-4c26-94f3-bdc02e389aa5 swap swap defaults 0 0
UUID=cd24b93f-a61d-47c6-9a82-c1ee080d877e /data/mysql ext4 defaults 0 0
不知道uuid的可以用blkid查看
[18:58:38 root@centos8[ ~]#blkid
/dev/sda1: UUID="637e2d09-6947-4148-abcc-dc2a09d5396b" TYPE="ext4" PARTUUID="c2bd30a3-01"
/dev/sda2: UUID="26f3bfe7-485b-4f12-91dc-b0966af358e1" TYPE="xfs" PARTUUID="c2bd30a3-02"
/dev/sda3: UUID="03c085ec-ad1f-4aef-a46b-ad3dce49b3cb" TYPE="xfs" PARTUUID="c2bd30a3-03"
/dev/sda5: UUID="acdbc962-14c9-4c26-94f3-bdc02e389aa5" TYPE="swap" PARTUUID="c2bd30a3-05"
/dev/sdb1: UUID="119d2a8f-05b5-4d85-98ef-0abaf287c858" TYPE="ext4" PARTUUID="580f44d0-ec12-934c-a276-526ce895efda"
/dev/sdb3: UUID="cd24b93f-a61d-47c6-9a82-c1ee080d877e" TYPE="ext4" PARTUUID="c36db401-e8f9-e042-bd1f-3badfd39ab5a"
/dev/sdc1: UUID="a32027e3-8003-4b1e-86d8-6710d23ec53f" TYPE="xfs" PARTUUID="84eeafd8-01"
/dev/sdc5: UUID="050ae4c0-a9f6-4ba5-9fc8-592dcfb65e9d" TYPE="ext4" PARTUUID="84eeafd8-05"
/dev/sr0: UUID="2020-01-03-21-42-40-00" LABEL="CentOS-8-1-1911-x86_64-dvd" TYPE="iso9660" PTUUID="087a73cc" PTTYPE="dos"
/dev/sdb4: PARTUUID="55c7b824-2f81-e643-a625-3b9b0de83e0d"
如何还不知道自己的分区类型的可以用下面这条命令查看
lsblk -f 可以查看系统的分区类型
范例
[18:36:53 root@centos8[ ~]#lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 637e2d09-6947-4148-abcc-dc2a09d5396b /boot
├─sda2 xfs 26f3bfe7-485b-4f12-91dc-b0966af358e1 /
├─sda3 xfs 03c085ec-ad1f-4aef-a46b-ad3dce49b3cb /data
├─sda4
└─sda5 swap acdbc962-14c9-4c26-94f3-bdc02e389aa5 [SWAP]
sdb
├─sdb1 ext4 119d2a8f-05b5-4d85-98ef-0abaf287c858 /data/mysql
├─sdb2
├─sdb3 ext4 cd24b93f-a61d-47c6-9a82-c1ee080d877e
└─sdb4
sdc
├─sdc1 xfs a32027e3-8003-4b1e-86d8-6710d23ec53f
├─sdc2
└─sdc5 ext4 050ae4c0-a9f6-4ba5-9fc8-592dcfb65e9d
sr0 iso9660 CentOS-8-1-1911-x86_64-dvd 2020-01-03-21-42-40-00
最后保存退出
使用amount -a命令的作用是重新加载/etc/fstab中的所有内容,也就是自动挂载其中定义的所有文件系统。
注意
du和df 的区别
du查看文件夹大小
df查看系统大小
磁盘使用过程
分区 fdisk
创建文件系统 mkfs.ext4|xfs
挂载 mount /dev/sdb1 /mountpoint
如何禁用swap分区
1. vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Jan 13 04:36:12 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=26f3bfe7-485b-4f12-91dc-b0966af358e1 / xfs defaults 0 0
UUID=637e2d09-6947-4148-abcc-dc2a09d5396b /boot ext4 defaults 1 2
UUID=03c085ec-ad1f-4aef-a46b-ad3dce49b3cb /data xfs defaults 0 0
#UUID=acdbc962-14c9-4c26-94f3-bdc02e389aa5 swap swap defaults 0 0
~
2.直接把swap哪行,开头用#注释掉就可以了
保存退出,用swapoff -a 禁用
注意:swapoff -a 可以临时禁用 但如果想永久禁用就必须修改文件/etc/fstab
实现逻辑卷
lvcreate 用于创建LVM的逻辑卷
lvdisplay 显示逻辑卷属性
lvextend 扩展逻辑卷空间
lvreduce 收缩逻辑卷空间
lvremove 删除指定LVM逻辑卷
lvresize 调整逻辑卷空间大小
lvscan 扫描逻辑卷
vgchange 修改卷组属性
vgconvert 转换卷组元数据格式
vgcreate 用于创建LVM卷组
vgdisplay 显示LVM卷组的信息
vgextend 向卷组中添加物理卷
vgreduce 从卷组中删除物理卷
vgremove 用于用户删除LVM卷组
vgrename 使用vgrename命令可以重命名卷组的名称
vgscan 扫描并显示系统中的卷组
pv 显示当前在命令行执行的命令的进度信息,管道查看器
pvchange 修改物理卷属性
pvck 检测物理卷的LVM元数据的一致性
pvcreate 将物理硬盘分区初始化为物理卷
pvdisplay 显示物理卷的属性
pvremove 删除一个存在的物理卷
pvs 输出物理卷信息报表
pvscan 扫描系统中所有硬盘的物理卷列表
pwck 用来验证系统认证文件内容和格式的完整性
lvcreate
lvcreate命令用于创建LVM的逻辑卷。逻辑卷是创建在卷组之上的。逻辑卷对应的设备文件保存在卷组目录下,例如:在卷组"vg1000"上创建一个逻辑卷"lvol0",则此逻辑卷对应的设备文件为"/dev/vg1000/lvol0"。
语法
lvcreate(选项)(参数)
选项
-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节;
-l:指定逻辑卷的大小(LE数)。
参数
逻辑卷:指定要创建的逻辑卷名称。
实例
使用lvcreate命令在卷组"vg1000"上创建一个200MB的逻辑卷。在命令行中输入下面的命令:
[root@localhost ~]# lvcreate -L 200M vg1000 #创建大小为200M的逻辑卷
输出信息如下:
Logical volume "lvol0" created
说明:创建成功后,新的逻辑卷"lvol0",将通过设备文件/dev/vg1000/lvol0进行访问。
vgcreate
vgcreate命令磁盘管理
vgcreate命令用于创建LVM卷组。卷组(Volume Group)将多个物理卷组织成一个整体,屏蔽了底层物理卷细节。在卷组上创建逻辑卷时不用考虑具体的物理卷信息。
语法
vgcreate(选项)(参数)
选项
-l:卷组上允许创建的最大逻辑卷数;
-p:卷组中允许添加的最大物理卷数;
-s:卷组上的物理卷的PE大小。
参数
卷组名:要创建的卷组名称;
物理卷列表:要加入到卷组中的物理卷列表。
实例
使用vgcreate命令创建卷组 "vg1000",并且将物理卷/dev/sdb1和/dev/sdb2添加到卷组中。在命令行中输入下面的命令:
[root@localhost ~]# vgcreate vg1000 /dev/sdb1 /dev/sdb2 #创建卷组"vg1000"
输出信息如下:
Volume group "vg1000" successfully created
pvcreate
pvcreate命令
pvcreate命令用于将物理硬盘分区初始化为物理卷,以便LVM使用。
语法
pvcreate(选项)(参数)
选项
-f:强制创建物理卷,不需要用户确认;
-u:指定设备的UUID;
-y:所有的问题都回答“yes”;
-Z:是否利用前4个扇区。
参数
物理卷:指定要创建的物理卷对应的设备文件名。
实例
查看磁盘信息:
[root@localhost ~]# fdisk -l
Disk /dev/hda: 41.1 GB, 41174138880 bytes
255 heads, 63 sectors/track, 5005 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 1288 10241437+ 83 Linux
/dev/hda3 1289 1925 5116702+ 83 Linux
/dev/hda4 1926 5005 24740100 5 Extended
/dev/hda5 1926 2052 1020096 82 Linux swap / Solaris
/dev/hda6 2053 2235 1469916 8e Linux LVM
/dev/hda7 2236 2418 1469916 8e Linux LVM
/dev/hda8 2419 2601 1469916 8e Linux LVM
/dev/hda9 2602 2784 1469916 8e Linux LVM
检查有无 PV 在系统上,然后将/dev/hda6到/dev/hda9建立成为PV格式
[root@localhost ~]# pvscan
No matching physical volumes found #找不到任何的 PV 存在!
将6-9分区转成pv,注意大括号的用途:
[root@localhost ~]# pvcreate /dev/hda{6,7,8,9}
Physical volume "/dev/hda6" successfully created
Physical volume "/dev/hda7" successfully created
Physical volume "/dev/hda8" successfully created
Physical volume "/dev/hda9" successfully created
这就分別表示每个 PV 的信息与系统所有 PV 的信息:
[root@localhost ~]# pvscan
PV /dev/hda6 lvm2 [1.40 GB]
PV /dev/hda7 lvm2 [1.40 GB]
PV /dev/hda8 lvm2 [1.40 GB]
PV /dev/hda9 lvm2 [1.40 GB]
Total: 4 [5.61 GB] / in use: 0 [0 ] / in no VG: 4 [5.61 GB]
更详细的列示出系统上面每个 PV 信息:
[root@localhost ~]# pvdisplay
"/dev/hda6" is a new physical volume of "1.40 GB"
--- NEW Physical volume ---
PV Name /dev/hda6 #实际的 partition 分区名称
VG Name #因为尚未分配出去,所以空白!
PV Size 1.40 GB #就是容量说明
Allocatable NO #是否已被分配,结果是 NO
PE Size (KByte) 0 #在此 PV 內的 PE 大小
Total PE 0 #共分割出几个 PE
free PE 0 #沒被 LV 用掉的 PE
Allocated PE 0 #尚可分配出去的 PE 数量
PV UUID Z13Jk5-RCls-UJ8B-HzDa-Gesn-atku-rf2biN
....(底下省略)....
删除物理卷:
[root@localhost ~]# pvremove /dev/sdb2
Labels on physical volume "/dev/sdb2" successfully wiped
修改物理卷属性:
[root@localhost ~]# pvchange -x n /dev/sdb1 #禁止分配指定物理卷上的PE
Physical volume "/dev/sdb1" changed
1 physical volume changed / 0 physical volumes not changed
lvremove命令
lvremove命令用于删除指定LVM逻辑卷。如果逻辑卷已经使用mount命令加载,则不能使用lvremove命令删除。必须使用umount命令卸载后,逻辑卷方可被删除。
语法
lvremove(选项)(参数)
选项
-f:强制删除。
参数
逻辑卷:指定要删除的逻辑卷。
实例
使用lvremove命令删除指定的逻辑卷。在命令行中输入下面的命令:
[root@localhost ~]# lvremove /dev/vg1000/lvol0 #删除逻辑卷"lvol0"
输出信息如下:
Do you really want to remove active logical
volume "lvol0"? [y/n]: y #确认删除
Logical volume "lvol0" successfully removed
lvreduce命令
lvreduce命令用于减少LVM逻辑卷占用的空间大小。使用lvreduce命令收缩逻辑卷的空间大小有可能会删除逻辑卷上已有的数据,所以在操作前必须进行确认。
语法
lvreduce(选项)(参数)
选项
-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节;
-l:指定逻辑卷的大小(LE数)。
参数
逻辑卷:指定要操作的逻辑卷对应的设备文件。
实例
使用lvreduce命令减少指定的逻辑卷的空间大小。在命令行中输入下面的命令:
[root@localhost ~]# lvreduce -L -50M /dev/vg1000/lvol0 #将逻辑卷的空间大小减少50M
输出信息如下:
......省略部分输出内容......
Do you really want to reduce lvol0? [y/n]: y #确认操作
Reducing logical volume lvol0 to 252.00 MB
Logical volume lvol0 successfully resized
vgconvert命令
vgconvert命令用于转换指定LVM卷组的元数据格式,通常将“LVM1”格式的卷组转换为“LVM2”格式。转换卷组元数据前必须保证卷组处于非活动状态,否则无法完成转换操作。
语法
vgconvert(选项)(参数)
选项
-M:要转换的卷组格式。
参数
卷组:指定要转换格式的卷组。
实例
转换卷组元数据格式前,使用vgchange命令将卷组设置为非活动状态。在命令行中输入下面的命令:
[root@localhost lvm]# vgchange -an vg1000 #设置卷组状态为非活动状态
0 logical volume(s) in volume group "vg1000" now active
使用vgconvert命令将卷组"vg1000"从"LVM1"格式转换为"LVM2"格式。在命令行中输入下面的命令:
[root@localhost lvm]# vgconvert -M2 vg1000 #转换卷组为"LVM2"格式
Volume group vg1000 successfully converted
使用vgchange命令将卷组设置为活动状态。在命令行中输入下面的命令:
[root@localhost lvm]# vgchange -ay vg1000 #设置卷组状态为活动状态
0 logical volume(s) in volume group "vg1000" now active
lvextend命令
lvextend命令用于在线扩展逻辑卷的空间大小,而不中断应用程序对逻辑卷的访问。使用lvextend命令动态在线扩展磁盘空间,整个空间扩展过程对于应用程序来说是完全透明的。
语法
lvextend(选项)(参数)
选项
-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节;
-l:指定逻辑卷的大小(LE数)。
参数
逻辑卷:指定要扩展空间的逻辑卷。
实例
使用lvextend命令为逻辑卷/dev/vg1000/lvol0增加100M空间。在命令行中输入下面的命令:
[root@localhost ~]# lvextend -L +100M /dev/vg1000/lvol0 #为了解决增加100M空间
输出信息如下:
Extending logical volume lvol0 to 300.00 MB
Logical volume lvol0 successfully resized
范例
命令解释
这段对话记录了在 CentOS 8 系统上使用 `parted` 命令将 `/dev/sdb` 分区并转换为 LVM 物理卷(PV),然后创建卷组(VG)和逻辑卷(LV),最后格式化逻辑卷、挂载到 `/data/mysql` 目录的过程。具体步骤如下:
1. 使用 `parted` 创建一个新的 Linux LVM 类型分区 `/dev/sdb1`,大小为5GB。
2. 安装 LVM 工具(如果尚未安装)。
3. 将 `/dev/sdb1` 和后来出现的 `/dev/sdc` 转换为物理卷 (`pvcreate`)。
4. 创建名为 `testvg0` 的卷组 (`vgcreate`),并将两个物理卷加入其中。
5. 在卷组 `testvg0` 中创建一个名为 `lv-mysql` 的逻辑卷 (`lvcreate`),大小为6GB。
6. 格式化新创建的逻辑卷为 ext4 文件系统 (`mkfs.ext4`)。
7. 创建目录 `/data/mysql` 并挂载该逻辑卷到该目录下。
1. 列出了所有逻辑卷(LVs),确认了`lv-mysql`的大小已从6GB扩展到了11GB。
2. 使用 `df -h` 查看文件系统挂载情况,确认 `/dev/mapper/testvg0-lv--mysql` 已经被挂载到 `/data/mysql` 目录下,并且显示其大小为5.9GB,这可能是因为文件系统尚未同步新分配的空间。
3. 执行了在线调整文件系统大小的操作,使用 `resize2fs /dev/testvg0/lv-mysql` 命令将文件系统大小扩大至与逻辑卷新的大小相匹配。之后再次运行 `df -h`,现在显示 `/dev/mapper/testvg0-lv--mysql` 的大小已经更新为11GB。
4. 卸载了 `/data/mysql` 文件系统,然后使用 `lvreduce -L 8G -r /dev/testvg0/lv-mysql` 命令缩小逻辑卷大小并同时调整文件系统大小。这个命令会先执行 `fsck` 检查文件系统完整性,然后通过 `resize2fs` 减小文件系统大小,最后缩小逻辑卷的大小。
5. 再次挂载 `/dev/mapper/testvg0-lv--mysql` 到 `/data/mysql`,并通过 `df -h` 验证挂载成功且大小减小到了8GB。
6. 最后,再次列出所有逻辑卷以确认 `lv-mysql` 的大小已经变更为8GB。
注解:alias scandisk='
echo - - - > /sys/class/scsi_host/host0/scan;
echo - - - > /sys/class/scsi_host/host1/scan;
echo - - - > /sys/class/scsi_host/host2/scan'
创建lvm逻辑卷
[root@centos8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part
sdb 8:16 0 50G 0 disk
sr0 11:0 1 7G 0 rom
[root@centos8 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x20b5cf5e.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-104857599, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-104857599, default 104857599): +5G
Created a new partition 1 of type 'Linux' and of size 5 GiB.
Command (m for help): T
T: unknown command
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): l
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto
1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep
1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'.
Command (m for help): p
Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x20b5cf5e
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 10487807 10485760 5G 8e Linux LVM
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[root@centos8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part
sdb 8:16 0 50G 0 disk
└─sdb1 8:17 0 5G 0 part
sr0 11:0 1 7G 0 rom
[root@centos8 ~]# pvs
[root@centos8 ~]# pvdisplay
[root@centos8 ~]# scandisk
[root@centos8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part
sdb 8:16 0 50G 0 disk
└─sdb1 8:17 0 5G 0 part
sdc 8:32 0 10G 0 disk
sr0 11:0 1 7G 0 rom
[root@centos8 ~]# pvcreate /dev/sd{b1,c}
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdc" successfully created.
[root@centos8 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 5.00g 5.00g
/dev/sdc lvm2 --- 10.00g 10.00g
[root@centos8 ~]# vgcreate -s 16 testvg0 /dev/sdb1 /dev/sdc
Volume group "testvg0" successfully created
[root@centos8 ~]# vgdisplay
--- Volume group ---
VG Name testvg0
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 <14.97 GiB
PE Size 16.00 MiB
Total PE 958
Alloc PE / Size 0 / 0
Free PE / Size 958 / <14.97 GiB
VG UUID lelByc-vV0p-npMx-yNcm-qDRo-kM1I-OfRSPN
[root@centos8 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 testvg0 lvm2 a-- 4.98g 4.98g
/dev/sdc testvg0 lvm2 a-- 9.98g 9.98g
[root@centos8 ~]# lvs
[root@centos8 ~]# lvcreate -L 6G -n lv-mysql testvg0
Logical volume "lv-mysql" created.
[root@centos8 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv-mysql testvg0 -wi-a----- 6.00g
[root@centos8 ~]# ll /dev/testvg0/lv-mysql
lrwxrwxrwx. 1 root root 7 Feb 27 20:21 /dev/testvg0/lv-mysql -> ../dm-0
[root@centos8 ~]# ll /dev/dm*
brw-rw----. 1 root disk 253, 0 Feb 27 20:21 /dev/dm-0
crw-rw----+ 1 root audio 14, 9 Feb 27 20:00 /dev/dmmidi
[root@centos8 ~]# mkfs/ext4 /dev/testvg0/lv-mysql
-bash: mkfs/ext4: No such file or directory
[root@centos8 ~]# mkfs.ext4 /dev/testvg0/lv-mysql
mke2fs 1.44.6 (5-Mar-2019)
Creating filesystem with 1572864 4k blocks and 393216 inodes
Filesystem UUID: 41af83c2-2a5e-4942-ae59-722fb16c739e
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
[root@centos8 ~]# blkid
/dev/sda1: UUID="637e2d09-6947-4148-abcc-dc2a09d5396b" TYPE="ext4" PARTUUID="c2bd30a3-01"
/dev/sda2: UUID="26f3bfe7-485b-4f12-91dc-b0966af358e1" TYPE="xfs" PARTUUID="c2bd30a3-02"
/dev/sda3: UUID="03c085ec-ad1f-4aef-a46b-ad3dce49b3cb" TYPE="xfs" PARTUUID="c2bd30a3-03"
/dev/sda5: UUID="acdbc962-14c9-4c26-94f3-bdc02e389aa5" TYPE="swap" PARTUUID="c2bd30a3-05"
/dev/sr0: UUID="2020-01-03-21-42-40-00" LABEL="CentOS-8-1-1911-x86_64-dvd" TYPE="iso9660" PTUUID="087a73cc" PTTYPE="dos"
/dev/sdb1: UUID="qEe6ta-NloJ-6DVw-dCYK-PXed-uYiy-W8Dvxy" TYPE="LVM2_member" PARTUUID="20b5cf5e-01"
/dev/mapper/testvg0-lv--mysql: UUID="41af83c2-2a5e-4942-ae59-722fb16c739e" TYPE="ext4"
/dev/sdc: UUID="AspCSK-myTf-ngWS-YRhh-kEOd-SceQ-OaARa5" TYPE="LVM2_member"
[root@centos8 ~]# mkdir /data/mysql
[root@centos8 ~]# mount -a
[root@centos8 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 967M 0 967M 0% /dev
tmpfs 983M 0 983M 0% /dev/shm
tmpfs 983M 9.4M 974M 1% /run
tmpfs 983M 0 983M 0% /sys/fs/cgroup
/dev/sda2 100G 4.7G 96G 5% /
/dev/sda3 50G 390M 50G 1% /data
/dev/sda1 976M 123M 787M 14% /boot
tmpfs 197M 1.2M 196M 1% /run/user/42
tmpfs 197M 4.0K 197M 1% /run/user/0
/dev/mapper/testvg0-lv--mysql 5.9G 24M 5.6G 1% /data/mysql
[root@centos8 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
testvg0 2 1 0 wz--n- <14.97g <8.97g
[root@centos8 ~]# lvextend -L +5G /dev/testvg0/lv-mysql
Size of logical volume testvg0/lv-mysql changed from 6.00 GiB (384 extents) to 11.00 GiB (704 extents).
Logical volume testvg0/lv-mysql successfully resized.
[root@centos8 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv-mysql testvg0 -wi-ao---- 11.00g
[root@centos8 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 967M 0 967M 0% /dev
tmpfs 983M 0 983M 0% /dev/shm
tmpfs 983M 9.4M 974M 1% /run
tmpfs 983M 0 983M 0% /sys/fs/cgroup
/dev/sda2 100G 4.7G 96G 5% /
/dev/sda3 50G 390M 50G 1% /data
/dev/sda1 976M 123M 787M 14% /boot
tmpfs 197M 1.2M 196M 1% /run/user/42
tmpfs 197M 4.0K 197M 1% /run/user/0
/dev/mapper/testvg0-lv--mysql 5.9G 24M 5.6G 1% /data/mysql
[root@centos8 ~]# resize2fs /dev/testvg0/lv-mysql
resize2fs 1.44.6 (5-Mar-2019)
Filesystem at /dev/testvg0/lv-mysql is mounted on /data/mysql; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/testvg0/lv-mysql is now 2883584 (4k) blocks long.
[root@centos8 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 967M 0 967M 0% /dev
tmpfs 983M 0 983M 0% /dev/shm
tmpfs 983M 9.4M 974M 1% /run
tmpfs 983M 0 983M 0% /sys/fs/cgroup
/dev/sda2 100G 4.7G 96G 5% /
/dev/sda3 50G 390M 50G 1% /data
/dev/sda1 976M 123M 787M 14% /boot
tmpfs 197M 1.2M 196M 1% /run/user/42
tmpfs 197M 4.0K 197M 1% /run/user/0
/dev/mapper/testvg0-lv--mysql 11G 30M 11G 1% /data/mysql
[root@centos8 ~]# umount /data/mysql
[root@centos8 ~]# lvreduce -L 8G -r /dev/testvg0/lv-mysql
fsck from util-linux 2.32.1
/dev/mapper/testvg0-lv--mysql: 11/720896 files (0.0% non-contiguous), 69312/2883584 blocks
resize2fs 1.44.6 (5-Mar-2019)
Resizing the filesystem on /dev/mapper/testvg0-lv--mysql to 2097152 (4k) blocks.
The filesystem on /dev/mapper/testvg0-lv--mysql is now 2097152 (4k) blocks long.
Size of logical volume testvg0/lv-mysql changed from 11.00 GiB (704 extents) to 8.00 GiB (512 extents).
Logical volume testvg0/lv-mysql successfully resized.
[root@centos8 ~]# mount /dev/testvg0/lv-mysql
[root@centos8 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 967M 0 967M 0% /dev
tmpfs 983M 0 983M 0% /dev/shm
tmpfs 983M 9.4M 974M 1% /run
tmpfs 983M 0 983M 0% /sys/fs/cgroup
/dev/sda2 100G 4.7G 96G 5% /
/dev/sda3 50G 390M 50G 1% /data
/dev/sda1 976M 123M 787M 14% /boot
tmpfs 197M 1.2M 196M 1% /run/user/42
tmpfs 197M 4.0K 197M 1% /run/user/0
/dev/mapper/testvg0-lv--mysql 7.9G 27M 7.5G 1% /data/mysql
[root@centos8 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv-mysql testvg0 -wi-ao---- 8.00g
[root@centos8 ~]# history
1 vim /etc/fstab
2 free -m
3 swapoff -a
4 free -m
5 reboot
6 free -m
7 vim /etc/fstab
8 alias scandisk='
echo - - - > /sys/class/scsi_host/host0/scan;
echo - - - > /sys/class/scsi_host/host1/scan;
echo - - - > /sys/class/scsi_host/host2/scan'
9 scandisk
10 lsblk
11 fdisk /dev/sdb
12 lsblk
13 pvs
14 pvsdisplay
15 yum install pvsdisplay
16 pvdisplay
17 scandisk
18 lsblk
19 pvcreate /dev/sd{b1,c}
20 pvs
21 vgcreate -s 16 testvg0 /dev/sdb1 /dev/sdc
22 vgdisplay
23 pvs
24 lvs
25 lvcreate -L 6G -n mysql
26 lvcreate -L 6G -n lv-mysql testvg0
27 lvs
28 ll /dev/testvg0/lv-mysql
29 ll /dev/dm*
30 mkfs/ext4 /dev/testvg0/lv-mysql
31 mkfs.ext4 /dev/testvg0/lv-mysql
32 blkid
33 mkdir /data/mysql
34 mount -a
35 df -h
36 vgs
37 lvextend -L 100%free /dev/testvg0/lv-mysql
38 lvextend -L +100%free /dev/testvg0/lv-mysql
39 lvextend -L +5G /dev/testvg0/lv-mysql
40 LVS
41 lvs
42 df -h
43 resize2fs /dev/testvg0/lv-mysql
44 df -h
45 umount /data/mysql
46 lvreduce -L 8G -r /dev/testvg0/lv-mysql
47 mount /dev/testvg0/lv-mysql
48 df -h
49 lvs
50 history
范例 :如果某个磁盘需要把他卸下来,但不能把数据给卸下来。数据仍然需要保存在系统上,怎麽办?
[root@centos8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part
sdb 8:16 0 50G 0 disk
├─sdb1 8:17 0 5G 0 part
└─sdb2 8:18 0 45G 0 part
sdc 8:32 0 10G 0 disk
└─testvg0-lv--mysql 253:0 0 8G 0 lvm /data/mysql
sdd 8:48 0 10G 0 disk
sr0 11:0 1 7G 0 rom
[root@centos8 ~]# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created.
[root@centos8 ~]# vgextend testvg0 /dev/sdd
Volume group "testvg0" successfully extended
[root@centos8 ~]# vgdisplay
--- Volume group ---
VG Name testvg0
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 4
Act PV 4
VG Size <69.94 GiB
PE Size 16.00 MiB
Total PE 4476
Alloc PE / Size 512 / 8.00 GiB
Free PE / Size 3964 / <61.94 GiB
VG UUID lelByc-vV0p-npMx-yNcm-qDRo-kM1I-OfRSPN
[root@centos8 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 testvg0 lvm2 a-- 4.98g 4.98g
/dev/sdb2 testvg0 lvm2 a-- 44.98g 44.98g
/dev/sdc testvg0 lvm2 a-- 9.98g 1.98g
/dev/sdd testvg0 lvm2 a-- 9.98g 9.98g
[root@centos8 ~]# pvmove /dev/sdc
/dev/sdc: Moved: 0.59%
/dev/sdc: Moved: 100.00%
[root@centos8 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 testvg0 lvm2 a-- 4.98g 4.98g
/dev/sdb2 testvg0 lvm2 a-- 44.98g 36.98g
/dev/sdc testvg0 lvm2 a-- 9.98g 9.98g
/dev/sdd testvg0 lvm2 a-- 9.98g 9.98g
[root@centos8 ~]# pvremove /dev/sdc
PV /dev/sdc is used by VG testvg0 so please use vgreduce first.
(If you are certain you need pvremove, then confirm by using --force twice.)
/dev/sdc: physical volume label not removed.
[root@centos8 ~]# vgreduce testvg0 /dev/sdc
Removed "/dev/sdc" from volume group "testvg0"
[root@centos8 ~]# pvremove /dev/sdc
Labels on physical volume "/dev/sdc" successfully wiped.
[root@centos8 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 testvg0 lvm2 a-- 4.98g 4.98g
/dev/sdb2 testvg0 lvm2 a-- 44.98g 36.98g
/dev/sdd testvg0 lvm2 a-- 9.98g 9.98g
命令解释
在上述命令序列中,您执行了以下操作:
1. 使用 `lsblk` 查看当前磁盘分区和挂载点信息。
2. 在 `/dev/sdd` 上创建物理卷(PV):`pvcreate /dev/sdd`。
3. 将新的物理卷 `/dev/sdd` 添加到名为 `testvg0` 的现有卷组(VG)中:`vgextend testvg0 /dev/sdd`。
4. 显示 `testvg0` 卷组的详细信息,确认卷组已扩展成功。
5. 移动 `/dev/sdc` 上的部分或全部逻辑卷到其他 PV 中以释放 `/dev/sdc`,使用 `pvmove /dev/sdc`。
6. 再次查看所有物理卷的状态,确认数据已从 `/dev/sdc` 移动到其他 PV。
7. 由于 `/dev/sdc` 还是属于 `testvg0` 卷组的一部分,所以在尝试删除它之前需要先从卷组中移除,执行 `vgreduce testvg0 /dev/sdc` 成功将 `/dev/sdc` 从卷组中移除。
8. 正确地执行了 `pvremove /dev/sdc` 删除 `/dev/sdc` 上的物理卷标签,并成功将其从 LVM 系统中移除。
最终结果是卷组 `testvg0` 包含 `/dev/sdb1`、`/dev/sdb2` 和 `/dev/sdd` 三个物理卷,而 `/dev/sdc` 已经被成功移除并清除了其物理卷标签。
逻辑卷快照
[root@centos8 ~]# cp /etc/passwd /data/mysql/f1.txt
[root@centos8 ~]# cp /etc/passwd /data/mysql/f2.txt
[root@centos8 ~]# cp /etc/passwd /data/mysql/f3.txt
[root@centos8 ~]# ls /data/mysql
f1.txt f2.txt f3.txt lost+found
[root@centos8 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv-mysql testvg0 -wi-ao---- 8.00g
[root@centos8 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
testvg0 3 1 0 wz--n- 59.95g 51.95g
[root@centos8 ~]# lvcreate -n lv-mysql-snapshot -s -p r -L 1G /dev/testvg0/lv-mysql
Logical volume "lv-mysql-snapshot" created.
[root@centos8 ~]# lvdisplay
--- Logical volume ---
LV Path /dev/testvg0/lv-mysql
LV Name lv-mysql
VG Name testvg0
LV UUID n718sb-mfRH-I242-e5uQ-GvGh-dctU-6bSruc
LV Write Access read/write
LV Creation host, time centos8.magedu.org, 2024-02-27 20:21:42 +0800
LV snapshot status source of
lv-mysql-snapshot [active]
LV Status available
# open 1
LV Size 8.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
--- Logical volume ---
LV Path /dev/testvg0/lv-mysql-snapshot
LV Name lv-mysql-snapshot
VG Name testvg0
LV UUID KzfLNX-FimE-9U4J-JdV3-0u47-jk49-0BLVM5
LV Write Access read only
LV Creation host, time centos8.magedu.org, 2024-02-27 21:06:20 +0800
LV snapshot status active destination for lv-mysql
LV Status available
# open 0
LV Size 8.00 GiB
Current LE 512
COW-table size 1.00 GiB
COW-table LE 64
Allocated to snapshot 0.01%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
[root@centos8 ~]# ll /dev/testvg0/lv-mysql*
lrwxrwxrwx. 1 root root 7 Feb 27 21:06 /dev/testvg0/lv-mysql -> ../dm-0
lrwxrwxrwx. 1 root root 7 Feb 27 21:06 /dev/testvg0/lv-mysql-snapshot -> ../dm-3
[root@centos8 ~]# ls /mnt
hgfs
[root@centos8 ~]# mount /dev/testvg0/lv-mysql-snapshot /mnt
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@centos8 ~]# ls /mnt
f1.txt f2.txt f3.txt lost+found
[root@centos8 ~]# vim /data/mysql/f1.txt
[root@centos8 ~]# vim /data/mysql/f1.txt
[root@centos8 ~]# vim /data/mysql/f1.txt
[root@centos8 ~]# vim /data/mysql/f2.txt
[root@centos8 ~]# vim /data/mysql/f2.txt
[root@centos8 ~]# vim /data/mysql/f2.txt
[root@centos8 ~]# vim /data/mysql/f2.txt
[root@centos8 ~]# cat /data/mysql/f2.txt
[root@centos8 ~]# cat /data/mysql/f3.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
geoclue:x:997:995:User for geoclue:/var/lib/geoclue:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
unbound:x:996:991:Unbound DNS resolver:/etc/unbound:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
gluster:x:995:990:GlusterFS daemons:/run/gluster:/sbin/nologin
chrony:x:994:989::/var/lib/chrony:/sbin/nologin
libstoragemgmt:x:993:987:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
pipewire:x:992:986:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
saslauth:x:991:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:990:985::/var/lib/setroubleshoot:/sbin/nologin
dnsmasq:x:984:984:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
clevis:x:983:982:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
cockpit-ws:x:982:980:User for cockpit-ws:/nonexisting:/sbin/nologin
sssd:x:981:979:User for sssd:/:/sbin/nologin
colord:x:980:978:User for colord:/var/lib/colord:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:979:977::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
nian:x:1000:1000:nian:/home/nian:/bin/bash
[root@centos8 ~]# vim /data/mysql/f3.txt
[1]+ Stopped vim /data/mysql/f3.txt
[root@centos8 ~]# cat /data/mysql/f3.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@centos8 ~]# ll /mnt/f3.txt
-rw-r--r--. 1 root root 2424 Feb 27 21:04 /mnt/f3.txt
[root@centos8 ~]# cat /mnt/f3.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
geoclue:x:997:995:User for geoclue:/var/lib/geoclue:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
unbound:x:996:991:Unbound DNS resolver:/etc/unbound:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
gluster:x:995:990:GlusterFS daemons:/run/gluster:/sbin/nologin
chrony:x:994:989::/var/lib/chrony:/sbin/nologin
libstoragemgmt:x:993:987:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
pipewire:x:992:986:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
saslauth:x:991:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:990:985::/var/lib/setroubleshoot:/sbin/nologin
dnsmasq:x:984:984:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
clevis:x:983:982:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
cockpit-ws:x:982:980:User for cockpit-ws:/nonexisting:/sbin/nologin
sssd:x:981:979:User for sssd:/:/sbin/nologin
colord:x:980:978:User for colord:/var/lib/colord:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:979:977::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
nian:x:1000:1000:nian:/home/nian:/bin/bash
[root@centos8 ~]# rm -f /data/mysql/f2.txt
[root@centos8 ~]# ls /data/mysql
f1.txt f3.txt lost+found
[root@centos8 ~]# ls /mnt
f1.txt f2.txt f3.txt lost+found
[root@centos8 ~]# cp /etc/fstab /data/mysql/f4.txt
[root@centos8 ~]# ls /data/mysql/
f1.txt f3.txt f4.txt lost+found
[root@centos8 ~]# ls /mnt
f1.txt f2.txt f3.txt lost+found
[root@centos8 ~]# umount /mnt
[root@centos8 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 989252 0 989252 0% /dev
tmpfs 1006124 0 1006124 0% /dev/shm
tmpfs 1006124 9576 996548 1% /run
tmpfs 1006124 0 1006124 0% /sys/fs/cgroup
/dev/sda2 104806400 4873676 99932724 5% /
/dev/sda3 52403200 398576 52004624 1% /data
/dev/sda1 999320 124984 805524 14% /boot
tmpfs 201224 1180 200044 1% /run/user/42
tmpfs 201224 4 201220 1% /run/user/0
/dev/mapper/testvg0-lv--mysql 8191416 27660 7766080 1% /data/mysql
[root@centos8 ~]# umount /data/mysql/
umount: /data/mysql/: target is busy.
[root@centos8 ~]# umount /data/mysql/
umount: /data/mysql/: target is busy.
[root@centos8 ~]# umount /data/mysql/
umount: /data/mysql/: target is busy.
[root@centos8 ~]# lsof /data/mysql
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vim 3474 root 6u REG 253,0 12288 13 /data/mysql/.f3.txt.swp
[root@centos8 ~]# umount -f /data/mysql/
umount: /data/mysql: target is busy.
[root@centos8 ~]# lsof /data/mysql
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vim 3474 root 6u REG 253,0 12288 13 /data/mysql/.f3.txt.swp
[root@centos8 ~]# kill -9 3474
[root@centos8 ~]# lsof /data/mysql
[1]+ Killed vim /data/mysql/f3.txt
[root@centos8 ~]# umount /data/mysql/
[root@centos8 ~]# lvconvert --merge /dev/testvg0/lv-mysql-snapshot
Merging of volume testvg0/lv-mysql-snapshot started.
testvg0/lv-mysql: Merged: 100.00%
[root@centos8 ~]# ls /data/mysql -l
total 0
[root@centos8 ~]# mount /dev/testvg0/lv-mysql /data/mysql
[root@centos8 ~]# ls /data/mysql -l
total 28
-rw-r--r--. 1 root root 2424 Feb 27 21:04 f1.txt
-rw-r--r--. 1 root root 2424 Feb 27 21:04 f2.txt
-rw-r--r--. 1 root root 2424 Feb 27 21:04 f3.txt
drwx------. 2 root root 16384 Feb 27 20:23 lost+found
命令解释
将 /etc/passwd 文件分别复制为 /data/mysql/ 目录下的 f1.txt, f2.txt, 和 f3.txt。
显示当前的逻辑卷信息,确认 lv-mysql 的大小为8GB,且查看了卷组 testvg0 的状态。
创建了一个名为 lv-mysql-snapshot 的快照逻辑卷,基于 /dev/testvg0/lv-mysql,并且大小为 1GB。
挂载快照逻辑卷到 /mnt 目录下,由于快照是只读的,所以挂载时显示警告“device write-protected, mounted read-only”。
使用 Vim 打开了 /data/mysql/f1.txt, /data/mysql/f2.txt 和 /data/mysql/f3.txt 文件进行编辑(虽然这个过程中没有明确的修改记录)。
分别查看了 /data/mysql/f2.txt 和 /data/mysql/f3.txt 文件内容,并在 /mnt 下查看了与之对应的快照文件 /mnt/f3.txt,内容一致。
删除了 /data/mysql/f2.txt 文件,但该文件在 /mnt 中的快照仍存在。
复制 /etc/fstab 文件至 /data/mysql/ 并重命名为 f4.txt。
尝试卸载 /data/mysql/,但因为有 Vim 进程打开了位于该目录下的 .f3.txt.swp 交换文件,导致目标处于忙碌状态而无法卸载。
解决办法:
需要先关闭正在使用 /data/mysql/ 目录下文件的所有进程,例如这里就是通过 kill 命令终止 PID 为 3474 的 Vim 进程:kill 3474。然后再尝试卸载 /data/mysql/ 目录。
使用 kill -9 3474 命令强制终止了 PID 为 3474 的 Vim 进程,这个进程之前打开了 /data/mysql/f3.txt 文件,导致无法卸载 /data/mysql/ 目录。现在该进程已结束,您可以成功卸载 /data/mysql/。
执行 lvconvert --merge /dev/testvg0/lv-mysql-snapshot 命令将快照卷 lv-mysql-snapshot 合并回原始逻辑卷 lv-mysql。这意味着所有对 lv-mysql 的更改(自创建快照以来的更改)都将应用到原始卷上,并且快照卷在合并完成后将被删除。
卸载 /data/mysql/ 后重新挂载逻辑卷 /dev/testvg0/lv-mysql 到 /data/mysql/ 目录下。
最后,通过 ls /data/mysql -l 查看 /data/mysql/ 目录下的文件列表,显示 f1.txt、f2.txt 和 f3.txt 文件以及 lost+found 目录均存在,说明在快照合并过程中,原始数据得到了保留,没有丢失。这里需要注意的是,在执行快照合并操作前,尽管您删除了 /data/mysql/f2.txt 文件,但由于我们基于快照还原了原始卷,因此 f2.txt 文件仍然存在于 /data/mysql/ 目录下。
问题
如何uuid不小心写错了,或者少复制了一位,导致系统无法启动,怎么办?
可以先把错误的给他注释掉 就加个#号就可以了
保存退出,重启,这个时候你在修改里面的配置,uuid复制正确就可以了
整体思路:大问题---小问题--解决