我在尝试调整(缩小)我的 LUKS lvm 分区大小时经历了一次令人担忧的冒险。我想缩小分区,以便可以轻松地将系统复制到新的较小尺寸的驱动器。在开始任何操作之前,我从旧磁盘中删除了一些文件以腾出一些可用空间。之后我从 USB live ubuntu 启动,并使用 KDE 分区管理器首先解锁 LUKS 分区。之后,我的 LVM 根分区可用,并使用 KDE 分区管理器的调整大小选项来缩小它。不幸的是,这导致了与此处描述的相同的问题: “超级块或分区表可能已损坏!”调整分区大小后
我的问题始于对其中一个答案的误解。所以我最终做的是运行以下命令:
e2fsck -f /dev/the_unlocked_lvm_root
通过以下选项选择:
e2fsck 1.45.5 (07-Jan-2020)
The filesystem size (according to the superblock) is 239771648 blocks
The physical size of the device is 125080576 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort? no
Pass 1: Checking inodes, blocks, and sizes
Error reading block 126877728 (Input/output error) while getting next inode from scan. Ignore error<y>? yes
Force rewrite<y>? yes
有时我按下“是”,直到我意识到我没有做我应该做的事情。现在我没有重新启动计算机,也没有做任何其他事情。我的问题基本上是我造成了多少损坏,问题是否可以恢复,或者我是否丢失了所有数据?我非常担心,因为当我停止 e2fsck 命令时,它显示“文件系统已修改”。
如有任何反馈,我们将不胜感激!
答案1
我刚刚遇到了类似的问题并且可以解决它。我没有使用 KDE 分区管理器,而是lvresize
使用调整逻辑卷大小的命令:
不要运行此命令:lvresize --verbose -L -40G /dev/mapper/vgubuntu-root
我的问题基本上是我造成了多少损坏,问题是否可以恢复,或者我是否丢失了所有数据?
发生了什么?
下面的描述是我的假设并且可能有部分错误,请随时编辑/评论以澄清误解。
首先,逻辑卷就是类似于硬盘驱动器的卷,而不是分区表或文件系统。
文件系统驻留在逻辑卷内部,因此据我了解,逻辑卷没有分区表。 (在整个磁盘而不是分区上创建文件系统是可能的,但不常见)
在不缩小文件系统的情况下缩小卷就像剪切硬盘驱动器的扇区一样。可能是因为缺少分区表,KDE分区管理器认为该卷是空的,让用户自由编辑它。
现在卷缩小了,但文件系统仍然有超出卷范围的块,这就是为什么
e2fsck
无法读取block 126877728
,它超出了卷的范围。尽管
e2fsck
想要rewrite
,但它不能,因为该块根本无法访问。因为有关卷大小以及文件系统的信息存储在物理硬盘驱动器上覆盖分区的开头,实际上没有数据丢失,至少在 HDD 上(可能在 SSD 上)。再次
e2fsck
无法重写块,位和字节在实际硬盘驱动器上的某处基本上未受影响。因此,通过简单地增加逻辑卷大小而不触及文件系统来撤消收缩应该可以解决问题。
长话短说
将卷恢复到原始大小应该可以解决问题而不会丢失数据:
lvresize --verbose -L +SIZE /dev/mapper/vgubuntu-root
# SIZE you shrunk the volume
# `lvresize` <volume> => resize a logical volume
# --verbose => Give more info.
# --resizefs => Resize filesystem AND LV with fsadm(8).
# -L => Specifies the new size of the LV,
# +/- add/subtracts to/from current size, e.g. g|G is GiB.
e2fsck -f /dev/mapper/vgubuntu-root
# `e2fsck` <fs-path> => Check a Linux ext2/ext3/ext4 file system
# -f => Force checking even if the file system seems clean.
# Output should look like this:
# Pass 1: Checking inodes, blocks, and sizes
# Pass 2: Checking directory structure
# Pass 3: Checking directory connectivity
# Pass 4: Checking reference counts
# Pass 5: Checking group summary information
如果您不知道原始尺寸,您可以随后增加卷大小(在上层分区的边界内),e2fsck
随后其错误报告中应该包含更少的块:
lvresize --verbose -L +1G /dev/mapper/vgubuntu-root
e2fsck -f /dev/mapper/vgubuntu-root
# Block bitmap differences: +121110528 +(121110532--121110533) +(121110537--121111049) +(121112586--121113097)
lvresize --verbose -L +1G /dev/mapper/vgubuntu-root
e2fsck -f /dev/mapper/vgubuntu-root
# Block bitmap differences: +(121110537--121111049) +(121112586--121113097)
lvresize --verbose -L +1G /dev/mapper/vgubuntu-root
e2fsck -f /dev/mapper/vgubuntu-root
# Pass 5: Checking group summary information
如何缩小逻辑卷和文件系统
与lvresize
选项--resisefs
(这将调整文件系统的大小- 明显队长):
# Shrink logical root volume AND filesystem
lvresize --verbose --resizefs -L -SIZE /dev/mapper/vgubuntu-root