线性模式

线性模式

我的 PC 上目前有 4 个 ext4 磁盘。它们总共有大约 4TB 的可用空间。我想存储 3TB 的映像一天。是否可以在磁盘的可用空间上创建临时虚拟文件系统。

我可以移动文件来获取单个驱动器上的空间。我只是想知道是否有针对此类问题的当前解决方案。

答案1

是的,这是可能的dmsetup

准备空文件

fallocate -l $((800*1024*1024*1024)) /mnt/disk1/file1
fallocate -l $((1200*1024*1024*1024)) /mnt/disk2/file2
fallocate -l $((1100*1024*1024*1024)) /mnt/disk3/file3
fallocate -l $((200*1024*1024*1024)) /mnt/disk4/file4

此示例总共提供了4 个文件中的、800 GiB1200 GiB1100 GiB200 GiB3300 GiB

准备循环设备

sudo losetup -f /mnt/disk1/file1
sudo losetup -f /mnt/disk2/file2
sudo losetup -f /mnt/disk3/file3
sudo losetup -f /mnt/disk4/file4

检查sudo losetup -a哪些循环设备与您的文件相关联。我的示例假设它们分别是/dev/loop0/dev/loop1和。/dev/loop2/dev/loop3

创建逻辑设备

编辑:请参阅 Xen2050 的回答。从这一点来看,它提供了一种更简单的方法。
我原来的更复杂的方法如下:

首先,您必须知道文件的单位大小。在我的示例中,512 B这些数字是800*1024*1024*2、、和;即、、和。1200*1024*1024*21100*1024*1024*2200*1024*1024*2167772160025165824002306867200419430400

您还需要第一个数字的总和...
零个数字(平凡):,0一个
数字(平凡):,1677721600两个
数字:1677721600 + 2516582400 = 4194304000
三个数字:1677721600 + 2516582400 + 2306867200 = 6501171200

我希望我的数学算得正确。:)

调用:

sudo dmsetup create my_device

现在给出一个适当的表格(地图):

0 1677721600 linear /dev/loop0 0
1677721600 2516582400 linear /dev/loop1 0
4194304000 2306867200 linear /dev/loop2 0
6501171200 419430400 linear /dev/loop3 0

(每一行都以计算的总和开始,然后是计算的大小。)

按下Ctrl+D完成。

创建文件系统

sudo mkfs.ext4 /dev/mapper/my_device

sudo mkdir /mnt/my_device
sudo mount -o rw /dev/mapper/my_device /mnt/my_device

3300 GiB请注意,由于文件系统需求,可用空间不足my_device。请根据分区上的可用空间和图像大小预先调整文件大小。


当你的工作结束时:

恢复

sudo umount /mnt/my_device
sudo dmsetup remove my_device
sudo losetup -d /dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3
rm /mnt/disk1/file1 /mnt/disk2/file2 /mnt/disk3/file3 /mnt/disk4/file4

答案2

使用mdadm设置 RAID 是另一种选择,类似于 Kamil 的答案,但希望不需要所有的数学运算。

一旦每个分区中都有一个大文件(fallocate看起来不错)并且设置了循环设备,然后根据https://raid.wiki.kernel.org/index.php/RAID_setup (将示例/dev/sdbN设备替换为您的/dev/loopN设备,并将--raid-devices=2其数量替换为(在您的情况下为 4 个):

  1. 首先 - 安装 mdadm
    • Debian,Ubuntu:apt-get install mdadm
    • Gentoo:emerge mdadm
    • 红帽:yum install mdadm

线性模式

好的,因此您有两个或多个分区,它们不一定大小相同(但当然可以),您想将它们附加到一起。

这里不支持备用磁盘。如果磁盘坏了,阵列也会随之坏掉。没有关于备用磁盘的信息。

使用 mdadm,只需执行如下命令

mdadm --create --verbose /dev/md0 --level=linear --raid-devices=2 /dev/sdb6 /dev/sdc5

应该创建数组。参数不言而喻。输出可能看起来像这样

mdadm: chunk size defaults to 64K
mdadm: array /dev/md0 started.

看看/proc/mdstat。您应该看到阵列正在运行。

现在,您可以创建一个文件系统,就像在任何其他设备上一样,挂载它,将其包含在您的 /etc/fstab 中等等。

RAID-0

您有两个或多个大小大致相同的设备,并且您想组合它们的存储容量,并通过并行访问它们来组合它们的性能。

mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/sdb6 /dev/sdc5

与线性模式一样,这里也不支持备用磁盘。RAID-0 没有冗余,因此当一个磁盘损坏时,整个阵列也会随之损坏。

运行 mdadm 后,您已初始化超级块并启动了 raid 设备。请查看/proc/mdstat看看发生了什么。您应该看到您的设备现在正在运行。

/dev/md0 现在可以格式化,安装,使用和滥用了。

我认为你不需要 RAID-0,因为在你的情况下,每个部分都在同一个驱动器上,而且它可能慢的访问时,会不必要地尝试同时读取每个部分。但似乎更完整的答案是将其包括在内。

  • 这也很重要保存 RAID 配置也可以使用下面的命令。查看输出(或在 mdadm.conf 文件中)以查看 RAID 的 UUID。

    mdadm --detail --scan >> /etc/mdadm/mdadm.conf

其他一些有用的命令(参见man mdadm):

  • mdadm --query /dev/md0   - 检查设备(阵列或组件设备,例如 /dev/loop1)以查看(1)它是否是 md 设备以及(2)它是否是 md 阵列的组件)
  • mdadm --examine /dev/loop1   - 打印设备上存储的元数据内容
  • mdadm --detail /dev/md0   - 详细的阵列信息,UUID
  • mdadm --stop /dev/md0   - 停止阵列
  • mdadm --assemble --scan   - 组装并启动标准配置文件(Ubuntu、Debian 上的 /etc/mdadm/mdadm.conf)中列出的所有阵列?如果配置保存方式同上)。
    • 还将启动 /etc/mdadm/mdadm.conf 中的所有阵列
  • mdadm --scan --assemble --uuid=a26bf396:31389f83:0df1722d:f404fe4c- 仅组装具有给定 UUID 的阵列。
  • mdadm --assemble /dev/md0 /dev/loop1 /dev/loop2 [all devices]   - 组装并启动,艰难之路

逻辑卷管理器也可以工作,但是从阅读https://www.centos.org/docs/5/html/Cluster_Logical_Volume_Manager/index.htmlhttp://linoxide.com/linux-how-to/lvm-configuration-linux/man lvm可能不像上面的 RAID 那么简单。显然 (?) lvm 命令似乎查看每一个连接到计算机的设备,所以我可以看到错误地包含错误设备的可能性……可能有一个命令某处为了解决这个问题...

相关内容