将单个大文件复制到多个较小的硬盘上

将单个大文件复制到多个较小的硬盘上

如果我有一个 1200 GB 的文件并且需要使用 3 个 500 GB 硬盘创建备份/复制它,那么使用 Linux 执行此操作的最佳方法是什么?

答案1

这是一个不需要单个 1200GB 目标文件系统的解决方案。

dd if=<1200G file> of=<dest disk 1 file> bs=1G count=400
dd if=<1200G file> of=<dest disk 2 file> bs=1G skip=400 count=400
dd if=<1200G file> of=<dest disk 3 file> bs=1G skip=800

使用这种技术,您甚至可以连接磁盘 1、复制到它、断开连接、连接磁盘 2 等等。

cat然后文件可以重新组合dd

dd if=<disk 1 file> of=<new 1200G file> bs=1G count=400
dd if=<disk 2 file> of=<new 1200G file> bs=1G seek=400 count=400
dd if=<disk 3 file> of=<new 1200G file> bs=1G seek=800

请注意,skip用于在输入文件中找到开始复制的正确位置,并seek用于复制到输出文件中的特定位置。

答案2

如何使用split命令?

Usage: split [OPTION]... [INPUT [PREFIX]]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
size is 1000 lines, and default PREFIX is `x'.  With no INPUT, or when INPUT
is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -a, --suffix-length=N   use suffixes of length N (default 2)
  -b, --bytes=SIZE        put SIZE bytes per output file
  -C, --line-bytes=SIZE   put at most SIZE bytes of lines per output file
  -d, --numeric-suffixes  use numeric suffixes instead of alphabetic
  -e, --elide-empty-files  do not generate empty output files with `-n'
      --filter=COMMAND    write to shell COMMAND; file name is $FILE
  -l, --lines=NUMBER      put NUMBER lines per output file
  -n, --number=CHUNKS     generate CHUNKS output files.  See below
  -u, --unbuffered        immediately copy input to output with `-n r/...'
      --verbose           print a diagnostic just before each
                            output file is opened
      --help     display this help and exit
      --version  output version information and exit

SIZE is an integer and optional unit (example: 10M is 10*1024*1024).  Units
are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB, ... (powers of 1000).

CHUNKS may be:
N       split into N files based on size of input
K/N     output Kth of N to stdout
l/N     split into N files without splitting lines
l/K/N   output Kth of N to stdout without splitting lines
r/N     like `l' but use round robin distribution
r/K/N   likewise but only output Kth of N to stdout

答案3

您可以使用split命令。例如,如果您想将原始大文件分成 100 MB 的小块,请在终端中写入:

split –bytes=100M /big/file/ /chunks/files/prefix

使用前缀使得重建更容易cat

cat prefix* > rebuilded.file

答案4

一个选项是创建一个卷组和一个横跨所有三个物理驱动器的卷。这将产生一个 ~1500G 的文件系统。

vgcreate尽管您的发行版可能包含用于卷组操作的 GUI 工具,但请参见手册页以了解详细信息。

如果要使用split这个,您需要在单个文件系统上留出 1200G 的空闲空间来容纳这三个部分。使用卷组可以省去这个麻烦。您只需复制文件即可。

相关内容