我对 Linux 和 Debian 发行版相当陌生,所以请不要责怪我。我的想法是,当您使用该cp
命令将文件从一个驱动器复制到另一个驱动器时,它不会以任何方式更改文件结构。真的吗?我知道保留选项将保留权限、时间戳等,但该cp
进程是否会改变内部文件结构或是否有能力以任何方式损坏文件?提前致谢。
答案1
是的,cp
可以更改文件系统中的结构,但通常程序不会注意到这一点,因此文件永远不会被损坏。稀疏文件会发生这种情况:带有洞里面,所以为了不占用太多空间,文件系统不保存内容洞部分。
cp
有--sparse
参数:
默认情况下,通过粗略启发式检测稀疏源文件,并且相应的目标文件也变得稀疏。这就是 所选择的行为
--sparse=auto
。指定--sparse=always
每当源文件包含足够长的零字节序列时创建稀疏 DEST 文件。用于--sparse=never
禁止创建稀疏文件。
注意:如果目标硬盘损坏,cp
可能会创建损坏的文件,但绝不会是故意的。
答案2
不会。如果与其中一个驱动器的连接出现问题,则复制过程中可能会发生损坏,但命令cp
本身不会导致损坏。您提到了权限和时间戳;这些不存储在文件本身中,而是存储在元数据中。命令cp
能(并且经常)更改元数据。
答案3
cp
永不故意地损坏的文件,但当然也有可能出现问题。对于一般用途,cp
复制文件不会有问题。
如果您希望确定复制文件的完整性,则应在复制后检查文件哈希,或使用内置此功能的工具(例如rsync --checksum
)。
答案4
“文件结构”并不是一个精确的概念。但对于该表达式的合理含义来说,cp
既不“保留”也不“更改”文件结构,它副本它。副本将以cp
已知的保存方式与原件相同。至少,这意味着相同的文件内容和一些相同的元数据(递归副本中的权限、文件名和类型,大多数其他元数据,例如时间戳-p
等)。大多数实现cp
不会重现压缩文件(例如稀疏文件)的内部结构。并且cp
不会保留文件布局(构成文件的块在磁盘上组织的方式)——这在同一文件系统中是不可能的,并且在不同的文件系统中也没有意义。这不会“损坏”数据,因为文件内容被保留:您获得相同的数据,但可能存储不同。