当我在不使用 LVM 的情况下添加更多硬盘时,是否有任何方法可以扩展文件系统?那些是什么 ?
答案1
在这个答案中,我将生成的设备称为“卷”,并将用于创建它的分区称为“设备”。
LVM 在内部使用该dmsetup
工具来设置其卷,并使用部分存储空间来存储元数据,即有关如何设置设备的信息。
另一种方法是dmsetup
手动创建设备,无需为元数据显式分配存储空间。它还允许您开始对已包含数据的分区使用此功能。假设您当前有一个驱动器 /dev/sda5,它是一个 ext4 文件系统。它有 100 GB 大,要获得其准确的扇区大小,请运行:
# blockdev --getsz /dev/sda5
195310000
假设您有一个 300GB 的新硬盘 sdb,并想用它来扩展 sda5。你可以为此,使用整个 sdb 设备而不使用分区表,但为了您自己的长期理智,也许最好创建一个跨越整个磁盘的分区,以便您稍后记住磁盘的使用方式。所以你就有了 sdb1,其大小 blockdev 报告为
# blockdev --getsz /dev/sdb1
583984375
因此,要将这两者合并在一起,您要做的第一件事就是确保卸载旧设备。当然,我应该说,即使在此之前,如果出现任何问题,也要备份数据。因此,在备份过程之后,运行:
# umount /dev/sda5
为了确定。注意:我从未在带有 systemd 的系统上尝试过此操作,因此请检查是否有更好的方法来避免它可能撤消您的手动卸载。
接下来,我们将创建一个包含设置新卷的命令的文件。它需要一些手动计算。基本上,我们创建的文件会一次一行地告诉您新卷的每个部分在磁盘上的位置。因此,我们希望扇区 0-195309999(总共 195310000 个扇区)映射到设备 /dev/sda5 扇区 0-195309999。然后我们希望扇区 195310000-779294374(总共 583984375 个扇区)映射到设备 /dev/sdb1 扇区 0-583984374。为此,我们创建一个文件 /etc/mybigvolume.dmsetup.txt,其中包含以下几行:
0 195310000 linear /dev/sda5 0
195310000 583984375 linear /dev/sdb1 0
每行的格式(扇区中的所有单位 = 512 字节):
<offset inside volume> <number of sectors> "linear" <source device> <source device offset>
所以,大声读出来,这几行的意思是:
目标卷的扇区从 0 开始,向前移动 195310000 个扇区,位于设备 /dev/sda5 中,从 /dev/sda5 内的扇区 0 开始
目标卷的扇区将从 195310000 开始,向前延伸 583984375 个扇区,位于设备 /dev/sdb1 中,从 /dev/sdb1 内的扇区 0 开始
旁注:为了便于理解数字,如果您想稍后在末尾添加另一个相同的 300G 磁盘,文件内容将是:
0 195310000 linear /dev/sda5 0
195310000 583984375 linear /dev/sdb1 0
779294375 583984375 linear /dev/sdc1 0
回到原来的例子;创建文件后,我们现在可以设置卷,以便开始使用它。我们用于dmsetup create
此目的。
# dmsetup create mybigvolume < /etc/mybigvolume.dmsetup.txt
如果一切顺利,即没有输出任何内容,您的新卷现在应该作为一个名为/dev/mapper/mybigvolume
195310000 + 583984375 = 779294375 个扇区的新设备存在。我们来验证一下:
# blockdev --getsz /dev/mapper/mybigvolume
779294375
你可以运行
# dmsetup table
随时查看哪些设备已使用 dmsetup 设置。
耶!现在需要考虑一些重要的事情:
您现在必须开始使用 /dev/mapper/mybigvolume 来访问磁盘。总是。如果您使用 /dev/sda5,您可能会破坏您的文件系统。因此,请确保您不再有 /dev/sda5 。当然,除了
/etc/mybigvolume.dmsetup.txt
您存储 dmsetup 配置的位置或位置。您的文件系统仍然只使用磁盘的前 195310000 个扇区,直到您明确要求它开始使用新的可用空间。检查您的文件系统管理工具以获取信息。如果您使用 LVM,则仍然需要此步骤。
此设置(例如 dmsetup 配置)仅持续到重新启动为止。因此,您需要将系统配置为
dmsetup create ...
在安装文件系统之前在启动时自动运行该命令,或者在每次启动时手动运行该命令,然后手动安装卷。前者的完成方式很大程度上取决于您的 Linux 发行版。但它可能类似于 cryptsetup 的实现方式(也使用 dmsetup 来设置设备)。
/etc/fstab 中的示例条目:
/dev/mapper/mybigvolume /data ext4 defaults,noatime 0 0
最后我想指出的是,您的卷发生故障的风险当然高于单个设备发生故障的风险。但我不知道你的设置,也许你使用这个 /dev/mapper/mybigvolume 作为 raid-1 阵列的一部分!无论如何,祝你好运! :)
附言。随意问的问题!
答案2
如果文件系统是 Btrfs 并已挂载,您可以向其添加设备(如 HDD 或分区)。例子:
btrfs device add /dev/sdc2 /current/mountpoint
man 8 btrfs-device
详情请参阅。还:将 Btrfs 与多个设备一起使用。这根本不涉及设备映射器驱动程序;文件系统本身执行通常 LVM 的工作。
我相信ZFS是类似的,即它可以自己处理多个设备。有用的搜索词:“将磁盘添加到 zpool”。