科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网服务器频道如何迁移和移动 UNIX 文件系统(下)

如何迁移和移动 UNIX 文件系统(下)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

如果您需要创建一个 .tar 文件并使用这种方法,而不是执行直接的复制,那么您必须拥有一个能够容纳源目录中所有文件的文件系统。要将文件系统的内容复制到新的位置,而无需创建临时装入点,您必须首先拥有足够容纳源目录中所有文件的空间。

来源:IBM 2008年6月26日

关键字: 操作系统 Linux 服务器 文件系统 unix

  • 评论
  • 分享微博
  • 分享邮件

  清单 6. 使用 tar 进行文件复制

  $ cd /usr

  $ tar cfp - ./* |(cd /mnt/usr.tmp; tar xvfp -)

  第一个 tar 中的 c 参数告诉 tar 创建一个存档。v、f 和 p 选项分别指定输出详细信息(显示正在添加或提取的文件)、对文件(而不是磁带设备)进行写入/读取、保持权限和所有权。   

  清单 6 中的命令行能够正常工作,这是因为在管道的后半部分中,在从标准输入读取管道的前半部分中创建的 .tar 文件之前,首先改变到了目标目录。  

  如果您需要创建一个 .tar 文件并使用这种方法,而不是执行直接的复制,那么您必须拥有一个能够容纳源目录中所有文件的文件系统。清单 7 介绍了进行复制的过程。  

  清单 7. 进行复制的过程

  $ cd /usr

  $ tar cfp /tmp/usr.tar ./*

  $ cd /mnt/usr.tmp

  $ tar xvfp /tmp/usr.tar

  无论使用哪一种解决方案,您将在每个文件复制到/复制出存档文件时获得相应的报告,假设您使用了 v 命令行选项(请参见清单 8)。  

  清单 8. 打印出复制过程

  a ./4lib/ 0K

  a ./4lib/libX.so.1.0 symbolic link to ./libX11.so.4.3

  a ./4lib/libX11.so.4.3 216K

  a ./4lib/libXaw.so.4.0 208K

  a ./4lib/libXmu.so.4.0 72K

  a ./4lib/libXol.so.3.1 1056K

  a ./4lib/libXt.so.4.1 264K

  a ./4lib/libce.so.0.0 48K

  a ./4lib/libdeskset.so.0.1 64K

  a ./4lib/libdga.so.1.0 40K

  a ./4lib/libhelp.so.1.0 24K

  a ./4lib/libolgx.so.3.1 56K

  a ./4lib/libtt.so.1.1 848K

  a ./4lib/libttstub.so.1.1 32K

  a ./4lib/libxview.so.3.73 1328K

  a ./4lib/libdl.so.1.0 symbolic link to //lib/libdl.so.1

  a ./4lib/libc.so.1.9 403K

  a ./4lib/libc.so.2.9 402K

  ...

  使用 tar 和直接文件系统交换  

  要将文件系统的内容复制到新的位置,而无需创建临时装入点,您必须首先拥有足够容纳源目录中所有文件的空间。   

  如果使用新的文件系统来替代一个目录,可以执行以下操作:  

  和前面一样,创建新的分区和文件系统。

  创建源目录的 .tar 文件(请参见清单 9)。  

  清单 9. 创建 .tar 文件

  $ cd /home

  $ tar cfvp /tmp/home.tar

  对源目录进行重命名(请参见清单 10)。  

  清单 10. 对源目录进行重命名

  $ cd ..

  $ mv home home.old

  创建目录,并将其权限和所有权设置为与原始目录相同。

  将新的文件系统装入到这个新的目录。

  提取 .tar 文件(请参见清单 11)。  

  清单 11. 提取 .tar 文件

  $ cd home

  $ tar xvfp /tmp/home.tar

  如果您需要为现有的文件系统改变分区(如清单 10 中所示),那么命令序列是类似的,但是您需要卸载现有的文件系统,而不是对目录进行重命名(请参见清单 12)。

  清单 12. 为现有的文件系统改变分区

  $ cd ..

  $ umount /home

  这种方法仍然是安全的,这是因为您拥有旧分区上源文件系统的完整副本。无论在哪一种解决方案中,您都没有删除内容或源数据。   

  对复制进行验证  

  无论使用 cp 还是 tar,您始终都应该验证复制过程是否成功完成。尽管 tar 对所复制的文件进行了证实(使用 v 选项),但是您应该确保在新的文件系统中正确地创建了这些文件。   

  首先,检查 du 对旧的和新的系统的输出(请参见清单 13)。

  清单 13. 检查 du 的输出

  $ du -sk /usr

  3923068 /usr

  $ du -sk /mnt/usr.tmp

  3923068 /mnt/usr.tmp

  这两个数字应该是相等的,然而,根据新文件系统的类型以及旧文件系统/目录和新文件系统/目录中对应的文件和目录的分配大小的不同,您可能会发现它们在大小上有些细微的差异。   

  另一种好的测试方法是,比较源和目标文件/目录的数目。您可以使用简单的 find command 来完成这项工作,如清单 14 所示。  

  清单 14. 比较源和目标文件/目录的数目

  $ find /usr |wc -l

  347001

  $ find /mnt/usr.tmp |wc -l

  347001

  如果您将文件从一个文件系统复制到另一个文件系统,那么还有一种好的测试方法,即比较索引节点数目,这将显示分配了多少个索引节点。如果您将文件从一个文件系统复制到另一个与其类型完全相同的文件系统,那么所使用的索引节点的数目应该是相等的。可以使用带 -i 命令行选项的 df 命令获取索引节点的统计信息,或者在传统的 UNIX 系统中,不带参数的 df 可以输出创建“文件”的数目。   

  清单 15 中的示例来自于 Linux 系统。  

  清单 15. 比较索引节点数目

  $ df -i /usr

  Filesystem Inodes IUsed IFree IUse% Mounted on

  /dev/sda3 977280 411959 565321 43% /

  清单 16 中的示例来自 Solaris。  

  清单 16. 在 Solaris 中比较索引节点数目

  $ /bin/df /usr

  /usr (/dev/dsk/c0t0d0s3 ): 9076010 blocks 863695 files

  更新系统以反映新的组织结构  

  此时,您应该已经拥有了一个新的文件系统,其中包含了要移动到这个新文件系统的文件系统或目录的副本。现在,您应该对系统文件(特别是文件系统装入信息)进行更新,以反映新的结构。该信息存储在 /etc/fstab、/etc/vfstab 中,或通过特定的管理工具来访问,如 HP-UX 上的 SAM。   

  如果您需要对现有文件系统中的目录进行迁移,可以执行下面的操作:   

  对原始目录进行重命名。

  创建新的目录。

  使用 chown 和 chmod 设置新目录的所有权和权限。

  理想情况下,您应该重新启动系统以确保使用新的布局。如果您将文件系统从一个设备迁移到另一个设备,那么必须重新启动。通常,您可以卸载现有的文件系统,特别是当它为系统目录(换句话说,/var 或 /usr 下的系统目录)时。   

  如果无法进行重新启动,可以手动地将新的系统装入到新的装入点,然后尽可能早地进行重新启动。  

  在重新启动并证实一切正常工作之后,可以删除旧的目录或重用旧的分区。  

  结束语  

  在许多情况下,需要对活动或非活动的 UNIX 文件系统进行复制。可能是因为耗尽了磁盘空间,所以文件系统需要更大的分区来安装软件,甚至是因为硬件将会出现故障。在这些情况下,您需要使用本文中介绍的技巧,将现有的文件复制到新的文件系统。   

  这种复制操作本身存在一定的陷井,即对活动的文件系统进行复制可能是有风险的,特别是在打开了多个文件的情况下。您还应该注意,务必避免用要复制的文件意外地覆盖分区或现有的文件。然而正如您所看到的,经过周密的考虑,可以高效地、可靠地对文件进行迁移,以充分利用更大的空间,即使是在活动的系统中也可以实现。   

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章