lvresize 失败:mount:/var:未安装。无法继续安装文件系统

lvresize 失败:mount:/var:未安装。无法继续安装文件系统

我正在尝试调整 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 的评论,它帮助我找到了解决方案。

我犯了两个错误:

  1. umount -l我不明白(延迟卸载)的含义。

  2. 当检查打开的文件时,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

就是这样。

相关内容