是否可以允许所有硬盘驱动器在 Linux 文件系统中被使用/列为单个挂载点,但仍然彼此独立,以至于如果一个驱动器断开连接,所有剩余驱动器仍能运行,而操作系统将不会显示该驱动器上的数据?
此外,如果这种设置可行,是否也可以在另一个系统中使用断开连接的硬盘并将其安装以访问其数据?
我一直在阅读有关使用硬盘的不同方法的文章,但似乎没有一种方法可以涵盖这种情况。 Raid 会创建一个卷,但如果驱动器丢失或未重建,数据就会丢失。 LVM 也会创建一个卷,但似乎无法实现我的问题中的热插拔特性。
这个问题的本质是针对媒体服务器,我可以在其中移除驱动器并将其插入其他计算机以安装它们/处理数据,然后将其重新插入服务器。如果我添加新驱动器,我应该能够将其分配给特定的安装点以保存数据。
例如,假设我将/dev/sda
和/dev/sdb
安装为/books
和/movies
。如果我需要更多空间,/movies
我会添加一个新驱动器/dev/sdc
,并以某种方式分配增加的空间/movies
,以便将数据写入有足够空间容纳整个文件的驱动器。然后,如果我想移动/dev/sdb
到另一台计算机,我可以将其弹出/安装到另一台计算机中,而仍在播放的电影/dev/sdc
应该仍然可以在/movies
这样的配置可能吗?
谢谢
答案1
简短的回答是“调查硬盘文件系统“- 它是一个虚拟文件系统,声称允许您以您设想的方式将驱动器合并在一起。它似乎有一个限制,因为它会选择第一个有足够空间容纳文件的驱动器。还有其他方法可以解决这个问题,但它们也会带来自己的问题。
我注意到 RAID 无法解决问题,因为 RAID 会创建磁盘依赖关系并在块设备级别运行。您的解决方案需要驻留在文件系统级别 - 因为您希望能够在其他地方独立读取磁盘,这意味着每个磁盘都需要有一个文件系统。
如果 mhddfs 不能满足您的要求(或者您无法使其工作),那么这个答案的其余部分可能会很有趣 - 答案只是部分答案,因为我在研究第二个部分答案时偶然发现了完整答案。它们提供了更知名和更被接受的有趣替代方案。
这导致了两个部分解决方案:
- 使用符号链接。假设您有 3 个磁盘,每个磁盘都有一个分区,文件系统为 EXT4(文件系统类型可能并不那么重要)。磁盘是 /dev/sda1 /dev/sdb1 和 /dev/sdc1
例如,你可以创建如下坐骑
/dev/sda1 /media/disk1 /dev/sdb1 /media/disk2 /dev/sdc1 /media/disk3
对于此示例,您需要创建子目录,例如
mkdir /media/disk1/books mkdir /media/disk2/movies/drama mkdir /media/disk2/books/old mkdir /media/disk3/movies/scifi
您还需要在“目标空间”上设置目录,因此 /data/books;/data/movies;/data/movies/drama;/data/movies/scifi
然后在 /data 下创建指向磁盘相应部分的符号链接,例如
ln -s /dev/disk1 /data/books
ln -s /dev/disk2 /data/books/old
ln -s /dev/disk2/drama /data/movies/drama
ln -s /dev/disk3/scifi /data/movies/scifi
这样,只要您仍拥有有序的空间层次结构,您就可以根据需要对内容进行符号链接。这样,您可以将信息分散到多个磁盘上,并使其显示为一个磁盘。
另一种解决方案是使用某种覆盖文件系统。这允许您使用优先级将多个系统组合成一个更大的系统。不同的发行版有不同的版本,语法也不同。常见的变体擅长读取 aufs、overlayfs、unionfs。然而,这些通常适合读取,但不太适合写入,因为它们通常一次只允许写入一个位置。