服务器上移动文件系统,如何迁移和移动 UNIX 文件系统(下)

本文详细介绍了如何在UNIX环境中使用tar命令安全地复制文件系统。通过创建.tar文件,然后在目标位置解压,可以实现文件系统的迁移,同时提供了验证复制过程的多种方法,包括对比du输出和索引节点数目。此过程适用于系统升级、扩展存储或迁移文件系统。
摘要由CSDN通过智能技术生成

清单 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 文件系统进行复制。可能是因为耗尽了磁盘空间,所以文件系统需要更大的分区来安装软件,甚至是因为硬件将会出现故障。在这些情况下,您需要使用本文中介绍的技巧,将现有的文件复制到新的文件系统。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值