将 resize2fs 与文件系统偏移一起使用

将 resize2fs 与文件系统偏移一起使用

Mount 可以选择offset指定文件系统不在设备的开头启动,而是在其后的特定字节数处启动。我如何使用resize2fs没有该选项的 来调整不在设备启动时启动的文件系统的大小?

答案1

选项不会直接传递给 mount ,而是设置一个循环设备,该循环offset设备引用底层块设备的偏移位置。然后 Mount 在该循环设备上执行操作,而不是在原始块设备本身上执行操作。mountlosetup

您还可以使用losetupmake resize2fsplay 这样的文件系统:

# losetup --offset=<offset> --find --show /dev/<device>
/dev/loop0
# resize2fs /dev/loop0 <newsize>
# losetup --detach /dev/loop0

(resize2fs 操作的示例可能不完整)

losetup搜索--find传递的第一个空闲循环设备(在该示例中为 /dev/loop0)。--show将该循环设备输出到 STDOUT。

答案2

在我从块设备开头的可用空间扩展 ext4 文件系统之前,我进行了搜索以了解其他人是如何做到的,看起来您的问题是我能找到的最接近的匹配。但提供的答案并不完全是您所要求的或我所需要的。因为我刚刚成功地从磁盘的开头调整大小/增长,所以我决定分享我的想法。

简而言之,该过程: 1.) 要增长/扩展的文件系统:分区上的 ext4 文件系统,从 1026048 扇区开始,到块设备末尾结束(/dev/sdb在我的例子中) 2.) 在该文件系统的块设备的开头,我必须将数据移动dd到未来/新分区的开头 3.) 删除旧分区并使用新的起始扇区重新创建它 4.)resize2fs以扩展到新分区大小

使用的命令和方法的详细信息:

Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

(以上信息由 透露fdisk -l /dev/sdb。)

计算dd查找和跳过偏移量bs(在我们的例子中bs匹配扇区大小):

# dd seek=2048 skip=1026048 if=/dev/sdb bs=512 of=/dev/sdb

因此,我们希望将数据从扇区 1026048 移至新分区将开始的扇区 2048。我们不应该丢失任何东西,因为我们从输入中读取的内容越多,我们得到的就越远,因此当我们开始用输出覆盖时(它最终将到达扇区 1026048),我们将复制那里的内容设备的开头并继续。

然后使用fdisk删除旧分区并重新创建它从扇区 2048 开始。

完成后,您可以运行:

# partprobe /dev/sdb or
# blockdev --rereadpt /dev/sdb
# resize2fs /dev/sdb<num>

扩展文件系统。

请在执行此类低级操作之前务必先备份数据。某些步骤失败或系统崩溃或断电将导致数据丢失。这是描述块设备上的单个分区的示例。您的设置可能会有所不同,因此请勿按原样使用。学习并了解它的工作原理,然后进行测试,如果获得预期结果,则在实时数据上运行,风险自负!

希望对其他人也有帮助。欢迎提供反馈以及改进/变得更详细的地方。

谢谢你!

相关内容