我有一个 12TB 的机箱,里面装满了数据(ext3)。我想复制一份,分布在单独的 3TB 磁盘上,每个磁盘都可以单独读取(没有 RAID 或绑定)。理想情况下,我希望这个过程能够得出哪些文件位于哪个磁盘上的索引,但这并不是绝对必要的。最终结果必须是原始目录结构中磁盘上的可读文件,而不是存档文件。跨卷拆分目录(复制目录结构)是可以的。
3TB 磁盘并非同时全部安装(也不可能同时安装),所以我需要一些东西让我可以暂停复制以切换磁盘。我强烈希望有一种解决方案不需要我弄清楚哪些文件放在哪个磁盘上或跟踪已复制的内容。
是否有现有的包可以做到这一点?
答案1
我不知道现有的软件包可以做到这一点,但是这里有一个完全未经测试的无错误检查脚本可能会起作用:
#!/bin/sh
SRC=/foo
DST=/bar
IDX=/tmp/CONTENTS
DISK_ID=`uuidgen`
echo "$DISK_ID" > $DST/disk_id
cd $SRC
find . -type f | while read FILE; do
FILE_SIZE=`stat -c '%a' "$FILE"`
FREE_DST=`stat -c '%a' "$DST"`
if [ $FREE_DST -lt $FILE_SIZE ]; then
while [ $FREE_DST -lt $FILE_SIZE ]; do
read -p "Please mount a new disk at $DST and hit enter:"
FREE_DST=`stat -c '%a' "$DST"`
done
DISK_ID=`uuidgen`
echo "$DISK_ID" > $DST/disk_id
fi
DST_DIR=`dirname "$FILE"`
DST_DIR="$DST/$DST_DIR"
[ -d "$DST_DIR" ] || mkdir -p "$DST_DIR"
cp -p "$FILE" "$DST_DIR"
echo "$DISK_ID $FILE" >> $IDX
done
答案2
这可能超出了您要寻找的范围,但 Unraid 的免费版本可以做到这一点。您可以将 3 个驱动器指定为没有奇偶校验驱动器的数据。将高水位设置为“填满”,并将分割级别设置为满足您需求的任何级别。
答案3
有人会 rsync 吗?创建几个文件夹,每个驱动器一个,移动占用一个驱动器的数据,然后只需使用 rsync 进行检查,而不是实际移动数据。
检查手册页