我正在尝试调整 debian 11.6 上的 /var 分区的大小。
供参考:
(我用“xxx”替换了真正的卷组名称)
# lsblk
NAME MAJ:MIN RM SIZE RO
TYPE MOUNTPOINT sda 8:0 0 447,1G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 488M 0 part /boot
└─sda3 8:3 0 446,2G 0 part
└─sda3_crypt 254:0 0 446,1G 0 crypt
├─xxx--vg-root 254:1 0 37,3G 0 lvm /
├─xxx--vg-tmp 254:2 0 7,4G 0 lvm /tmp
├─xxx--vg-var 254:3 0 108G 0 lvm /var
├─xxx--vg-home 254:4 0 287,4G 0 lvm /home
└─xxx--vg-varlog 254:5 0 6G 0 lvm
sr0 11:0 1 1024M 0 rom
# cat /proc/mounts |grep vg-var
/dev/mapper/xxx--vg-var /var ext4 rw,relatime 0 0
我终止了所有访问 /var 的进程
systemctl stop lightdm
systemctl stop tor
systemctl stop cron
lsof 和 fuser 显示没有更多打开的文件
然后我做了:
# lvresize -r -L 64G xxx-vg/var
不幸的是,我不再有确切的输出。lvresize 询问是否应该卸载文件系统,我选择了“是”,但它没有这样做。
然后我尝试手动卸载/var:
# umount -f /var
这也失败了 编辑:显然这失败了,因为 /var/log 仍然被挂载
经过一番研究,我尝试了 lazy umount
# umount -l /var
这有效 编辑:/var/log ist 现在也被卸载了
然后我再次尝试:
# lvresize -r -L 64G xxx-vg/var
Do you want to unmount "/var" ? [Y|n] y
[...]
这个问题很奇怪,因为文件系统已经被卸载了。
lvresize 再次失败(其余输出):
[...]
umount: /var: not mounted.
fsadm: Cannot proceed with mounted filesystem "/var".
/sbin/fsadm failed: 1
Filesystem resize failed.
然后我尝试直接使用 fsadm,得到了最荒谬的结果:
# fsadm -y resize /dev/mapper/xxx--vg-var 64G
Do you want to unmount "/var" ? [Y|n] y
umount: /var: not mounted.
fsadm: Cannot proceed with mounted filesystem "/var".
mount 和 umount 可以正常工作
# mount /var && cat /proc/mounts |grep var
efivarfs /sys/firmware/efi/efivars efivarfs rw,nosuid,nodev,noexec,relatime 0 0
/dev/mapper/xxx--vg-var /var ext4 rw,relatime 0 0
# umount /var && cat /proc/mounts |grep var
efivarfs /sys/firmware/efi/efivars efivarfs rw,nosuid,nodev,noexec,relatime 0 0
umount 告诉我:
# umount /var
umount: /var: not mounted.
我尝试使用 fsadm 检查:
# fsadm check /dev/mapper/xxx--vg-var
# echo $?
3
来自手册:
状态代码 3 表示无法执行请求的检查操作,因为文件系统已挂载并且不支持在线 fsck(8)。
e2fsck 也不起作用:
# e2fsck /dev/mapper/xxx--vg-var
e2fsck 1.46.2 (28-Feb-2021)
/dev/mapper/xxx--vg-var is in use.
e2fsck: Cannot continue, aborting.
显然 /var 是“半安装”。
有什么建议么?
答案1
感谢 Nikita Kipriyanov 的评论,它帮助我找到了解决方案。
我犯了两个错误:
umount -l
我不明白(延迟卸载)的含义。当检查打开的文件时,
fuser
我错过了以下-m
选项:
fuser -m /var
/var: 1rce 2rc 3rc 4rc 6rc 7rc 9rc 10rc 11rc 12rc 13rc 14rc 15rc 16rc 17rc 18rc 19rc 20rc 21rc 22rc 23rc 25rc 26rc 27rc 28rc 30rc 31rc 32rc 33rc 35rc 36rc 37rc 38rc 40rc 41rc 42rc 43rc 45rc 46rc 47rc 48rc 50rc 51rc 52rc 53rc 54rc 55rc 56rc 57rc 58rc 60rc 61rc 62rc 63rc 65rc 66rc 67rc 68rc 69rc 70rc 71rc 72rc 73rc 75rc 76rc 77rc 78rc 80rc 81rc 82rc 83rc 85rc 86rc 87rc 88rc 90rc 108rc 109rc 110rc 111rc 112rc 113rc 114rc 115rc 117rc 132rc 136rc 137rc 138rc 139rc 140rc 141rc 142rc 143rc 149rc 150rc 151rc 153rc 154rc 155rc 156rc 159rc 160rc 169rc 172rc 173rc 199rc 225rc 231rc 236rc 245rc 257rc 258rc 259rc 260rc 261rc 280rc 281rc 290rc 291rc 292rc 311rc 312rc 313rc 314rc 315rc 316rc 317rc 318rc 319rc 320rc 321rc 322rc 326rc 331rc 335rc 336rc 362rc 370rc 371rc 372rc 437rc 439rc 440rc 441rc 446rc 447rc 450rc 452rc 455rc 462rc 493rc 499rc 500rc 508rc 552rc 553rce 572rce 573rc 574rc 626rc 627rc 628rc 639rc 668rc 705rc 754rc 755rc 757rc 758rc 759rc 760rc 763rc 764rc 793rc 794rc 819rce 821rce 823rce 830rce 831rce 832rce 833rce 835rce 836rce 837rce 902rce 905rc 906rc 907rc 948rce 950rce 954rc 974rc 1021e 1079rc 1088rce 1092rc 1275rc 1299rc 1329rc 1332rc 1398rc 1404rce 1407rce 1408rce 1422rce 1427rce 1428re 1429re 1448rc 1449rc 1450rc 1451rc 1452rc 1455rc 1485re 1492re 1497re 1571rc 1573rc 1586re 1682re 1683re 1703re 1716rc 1717rc 1721rce 1722rce 1937rc 1944rc 1990rc 1992rc 2037rc 2073rc 3346rc 3361rc 3397rc 3419rc 3486rc 3487rc 3489rc 3490rc 3491rc 3492rc 3493rc
/var 上有很多打开的文件。之后延迟卸载它们仍处于打开状态。因此umount -l /var
设备处于“半安装”状态。因此输出令人困惑fsadm
(文件系统未安装,无法继续安装文件系统)。
看在 Linux 中延迟卸载或卸载繁忙的磁盘 再次感谢 Nikita Kipriyanov 指出这一点。
这最终完成了工作:
首先,再次挂载卷:
# mount /var
# mount /var/log
现在停止打开文件的服务(我处于 ssh 连接上):
# systemctl isolate rescue-ssh.target
卸载卷(可能没有必要,因为 lvresize 会这样做):
# umount /var/log
# umount /var
执行实际的调整大小操作(缩小):
# lvresize -r -L 64G xxx-vg/var
fsck from util-linux 2.36.1
/dev/mapper/xxx--vg-var: 9189/7036416 files (0.5% non-contiguous),
1298192/28311552 blocks
resize2fs 1.46.2 (28-Feb-2021)
Resizing the filesystem on /dev/mapper/x--vg-var to 16777216 (4k) blocks.
The filesystem on /dev/mapper/xxx--vg-var is now 16777216 (4k) blocks long.
Size of logical volume xxx-vg/var changed from 108,00 GiB (27648 extents) to 64,00 GiB (16384 extents).
Logical volume xxx-vg/var successfully resized.
这次成功了!现在挂载卷:
# mount /var
# mount /var/log
Ang 恢复正常运行:
# systemctl isolate default.target
就是这样。