复制设备节点

复制设备节点

我正在尝试将正在运行的 Linux 安装转移到新的更大磁盘,因此我将新磁盘连接到 USB 端口,对其进行分区并创建文件系统。在复制所有文件时,我在 /dev 目录上遇到了障碍。 “cp -a”完成了大部分工作,但在 /dev/video0 上失败并显示“不支持操作”。

>ls -l /dev/video0    # on disk I copy from
crw-rw----+ 1 root video 81, 0 2011-09-25 17:15 video0

>ls -l dev/video0    # on disk copied to
crw-rw---- 1 root video 81, 0 2011-09-25 17:15 video0

因此,除了访问权限字段末尾的“+”之外,似乎所有内容都被复制了。该加号是什么意思以及如何在目标磁盘上创建它?

答案1

末尾的+表示存在访问控制列表。除了传统的 UNIX 权限(仅区分所属用户、所属组和其他用户)之外,文件上的 ACL 还为其他用户或组提供特定权限。您可以使用getfacl查看文件上的 ACL 并setfacl对其进行设置。

cp -a如果可以的话会复制 ACL。不能的原因是目标文件系统不支持 ACL 或在没有 ACL 支持的情况下安装。

在这里,这并不重要。/dev无论如何,它不是磁盘上的文件系统,您不应该复制它,同样您也不应该复制/proc/sys其他非磁盘文件系统。运行cp -ax以执行复制,而无需递归到其他文件系统。

cp通常不是将现有安装转移到新磁盘的最佳方法。批量复制文件系统,然后将其放大以填充目标分区会更容易。简而言之:

cat </dev/sdy1 >/dev/sdz1
resize2fs /dev/sdz1

其中/dev/sdy1是包含现有安装的分区,也是/dev/sdz1您要将系统复制到较大磁盘上的位置。键入此命令时要非常小心,因为这将不可恢复地删除目标分区。

复制文件后,您需要在新磁盘上设置引导加载程序。grub-install /dev/sdz应该可以解决问题,但您可能需要先写一个/boot/grub/device.map来表示新磁盘将成为主磁盘。如果您遇到问题,最简单(如果不是最方便)的方法是将新磁盘放在最终位置,然后从 Ubuntu CD/USB 启动并告诉安装程序修复引导加载程序。

相关内容