如何将一个大文件分割成多个较小的块并将其每个部分写入单独的位置?
split
命令似乎只将所有文件输出到一个位置。
我需要做的上下文如下:我必须通过创建压缩克隆映像来备份大硬盘。我没有外部硬盘可以将压缩图像作为一个整体来容纳。所以我需要某种方法来将图像分割并写入多个位置。
对于克隆和压缩图像,我的想法如下。
dd if=/dev/sda conv=sync,noerror bs=64K | gzip -c | split -b 110g - <Multiple locations for each piece>
我的一个选择是使用连接在一起的所有外部硬盘创建一个软件 RAID 0 分区,并将压缩映像写入其中。但如果存在更简单的解决方案(使用内置 gnu/linux 命令),那就太好了。
我还可以一次仅 dd 大型硬盘的一小部分,并在循环中重复执行此操作(使用 dd 的查找和计数参数)。但除非我用 gzip 压缩它,否则我不知道单个 110Gb 外部硬盘可以容纳多少块。
答案1
我认为你可以不用使用split
's --filter=COMMAND
。
... | split -b <SIZE> -d - part --filter=./split-filter
哪里./split-filter
有类似的东西
#!/bin/bash
set -e
n="${FILE#part}"
case $((10#$n%3)) in
0)
dd bs=64K >"path1/$FILE"
;;
1)
dd bs=64K >"path2/$FILE"
;;
2)
dd bs=64K >"path3/$FILE"
;;
esac