`sudo cp -a` 将所有权更改为 root(而不是保留原始用户)

`sudo cp -a` 将所有权更改为 root(而不是保留原始用户)

我试图备份一些目录和由sudo cp -avroot 所创建的一些副本,而其他目录则保留其属性。这是一个已知问题还是我遗漏了什么?

源(ext4)是以前对外使用的ubuntu系统盘,目录结构完好,但仅用于存储,不用于启动。用户名/组名和 uid/gid 与之前系统中的相同。

使用 4.1.2 btrfs-progs 从 NTFS 格式化目标 (btrfs)。

$ sudo cp -av /mnt/src/home/user/thecakeisalie/ /mnt/dest/subvol/

drwx------ 6 user user 4096 Jul 18 09:11 /mnt/src/home/user/thecakeisalie/
drwx------ 3 root root 4096 Jul 18 20:36 /mnt/dest/subvol/thecakeisalie/

  File: ‘/mnt/src/home/user/thecakeisalie/’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 812h/2066d  Inode: 9044504     Links: 6
Access: (0700/drwx------)  Uid: ( 1000/user)   Gid: ( 1000/user)
Access: 2015-07-18 20:21:08.725414953 -0700
Modify: 2015-07-18 09:11:06.873427304 -0700
Change: 2015-07-18 20:08:34.161737231 -0700
 Birth: -

  File: ‘/mnt/dest/subvol/thecakeisalie/’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 805h/2053d  Inode: 660098      Links: 3
Access: (0700/drwx------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-07-18 20:36:23.909377491 -0700
Modify: 2015-07-18 20:36:09.729089386 -0700
Change: 2015-07-18 20:36:09.729089386 -0700
 Birth: -

测试其他一些目录会产生与,输出完全匹配的/mnt/src/home/user/thecakeisalie/预期行为。ls -lstat

今天下午已经创建了一些“表现良好”的目录,但我在开始外部使用驱动器之前未曾触及的目录上进行了测试,其中一些目录也没有问题。

备份后,我chown对所有内容进行了编辑,因此没有问题,但我真的很好奇原因可能是什么。我用谷歌搜索了很多,但我要么没有使用正确的搜索短语,要么这是众所周知的。

下面的 mjturner 有一个观点,所以我尝试了内部系统磁盘(ext4)上的cp -a目录的命令~/Download,结果是相同的,因此我不认为这是 btrfs 问题。

上周我修复了一台旧笔记本电脑,情况类似:要升级 Ubuntu 13.10,我必须在另一个新分区上安装 Ubuntu 15.04,启动后我sudo cp -a从旧系统完成了整个家庭。 13.10 有 2 个用户(alpha、bravo),15.04 已设置有 1 个用户(alpha)。 bravo 的条目最终显示了 GID/UID(当然),而 alpha 的外观和工作方式与以前相同。 (我必须检查新旧 alpha 的 GID/UID 是否相同)。

有关当前系统的一些额外信息uname
Linux 3.19.0-22-generic #22-Ubuntu SMP Tue Jun 16 17:14:22 UTC 2015 i686

我将对源驱动器进行大规模清理(删除系统目录并将主存储目录移至根目录),然后我将再次测试。

与此同时,是否有其他命令可以用来测试源和目标的差异?不管我要挖多低都没关系(无论如何我想温习C)。

答案1

我意识到我忘了提及,因为cp -a我正在复制 3​​00+ GB 的数据,所以在另一个终端检查目的地后我中止了。

感谢吉尔斯的评论,我开始测试它是否只发生在目录中。正如下面的测试所证明的那样,基本上所有文件都被写入根目录,并且一旦完成复制,旧属性就会应用于文件/目录。

TEST_1:3 GB 文件夹和 CTRL-C 期间sudo cp -a:当前文件被截断,保留为根目录,目录也是如此。

home/Download# ls -l
total 20
drwx------ 3 root      root       4096 Jul 19 15:11 ./
drwxr-xr-x 3 user user 12288 Jul 19 15:11 ../
drwx------ 2 root      root       4096 Jul 19 15:11 thecakeisalie/

home/Download# cd thecakeisalie/; ls -l
total 16164
drwx------ 2 root      root         4096 Jul 19 15:11 ./
drwx------ 3 root      root         4096 Jul 19 15:11 ../
-rw------- 1 user user 2109623 May 19  2013 file1
-rw------- 1 user user 2520465 May 19  2013 file2
-rw------- 1 root root 393216  Jul 19 15:11 file3

TEST_2:允许sudo cp -a完成:

home/Download# ls -l
total 20
drwx------ 3 user user  4096 Jul 19 15:11 ./
drwxr-xr-x 3 user user 12288 Jul 19 15:11 ../
drwx------ 2 user user  4096 Jul 19 15:11 thecakeisalie/

home/Download# cd thecakeisalie/; ls -l
total 16164
drwx------ 3 user user  4096 Jul 19 15:11 ./
drwxr-xr-x 3 user user 12288 Jul 19 15:11 ../
-rw------- 1 user user 2109623 May 19  2013 file1
(...)
-rw------- 1 user user 2520465 May 19  2013 last_file

答案2

这对我来说看起来很奇怪 - 你所描述的绝对是不是一个已知问题。我已经cp -a广泛使用过(包括克隆整个 Linux 系统),并且我唯一一次看到问题是由 XFS 中的错误引起的(后来已修复)。

我的猜测是btrfs,这是仍在进行广泛开发的 中的一个错误。它可以重现吗?您可以尝试将这些相同的源目录复制到目标文件系统上的新位置并查看权限是否保留。如果可以重现的话,你可以提交错误报告

相关内容