系统管理指南:设备和文件系统

在磁带之间复制文件系统

以下两个命令用于在磁带之间复制文件系统:

有关 volcopy 的更多信息,请参见 volcopy(1M)

下一节介绍如何使用 dd 命令在磁带之间复制文件系统。

创建精确的文件系统副本

dd 命令可以将完整的 UFS 文件系统精确地复制到其他文件系统或磁带(块级别)。缺省情况下,dd 命令会将标准输入复制到标准输出。


注 –

如果未首先指定适当的块大小,请不要将 dd 命令和磁带长度可变的磁带机一同使用。


可以指定设备名称而不是指定标准输入和/或标准输出。在本示例中,软盘的内容将被复制到 /tmp 目录中的某个文件:


$ dd < /floppy/floppy0 > /tmp/output.file

2400+0 records in

2400+0 records out

dd 命令可报告它所读取和写入的块数目。+ 号后的数字是已复制的部分块的数目。缺省块大小为 512 字节。

dd 命令的语法与大多数其他命令不同。选项以 keyword=value 对的形式指定,其中 keyword 是要设置的选项,value 是该选项的参数。例如,可以使用以下语法替换标准输入和标准输出:


$ dd if=input-file of=output-file

要使用 keyword=value 对(而不使用重定向符号),则可以键入以下内容:


$ dd if=/floppy/floppy0 of=/tmp/output.file

Procedure如何复制磁盘 (dd)

考虑复制磁盘时,请牢记以下要点:

如果您仍在考虑使用 dd 命令复制磁盘,请牢记以下注意事项:

  1. 成为超级用户或承担等效角色。

  2. (可选)创建 /reconfigure 文件,以使系统能够在重新引导时识别要添加的目标磁盘(如有必要)。


    # touch /reconfigure
    
  3. 关闭系统。


    # init 0
    
  4. 将目标磁盘连接到系统。

  5. 引导系统。


    ok boot -s
    
  6. 将源磁盘复制到目标磁盘。


    # dd if=/dev/rdsk/device-name of=/dev/rdsk/device-name bs=block-size
    
    if=/dev/rdsk/device-name

    表示主磁盘设备的重叠片,通常为片 2。

    of=/dev/rdsk/device-name

    表示目标磁盘设备的重叠片,通常为片 2。

    bs=blocksize

    用于标识块大小,如 128 KB 或 256 KB。较大的块大小可以缩短复制磁盘所用的时间。

    有关更多信息,请参见 dd(1M)

  7. 检查新的文件系统。


    # fsck /dev/rdsk/device-name
    
  8. 挂载目标磁盘的根 (/) 文件系统。


    # mount /dev/dsk/device-name /mnt
    
  9. 转到 /etc/vfstab 文件所在的目录。


    # cd /mnt/etc
    
  10. 使用文本编辑器编辑目标磁盘的 /etc/vfstab 文件,以引用正确的设备名称。

    例如,将 c0t3d0 的所有实例都更改为 c0t1d0

  11. 转到目标磁盘的根 (/) 目录。


    # cd /
    
  12. 取消挂载目标磁盘的根 (/) 文件系统。


    # umount /mnt
    
  13. 关闭系统。


    # init 0
    
  14. 从目标磁盘引导至单用户模式。


    # boot diskn -s
    

    注 –

    目标磁盘不需要 installboot 命令,因为引导块是作为重叠片的一部分进行复制的。


  15. 取消配置目标磁盘。


    # sys-unconfig
    

    系统在取消配置后即会关闭。

  16. 再次从目标磁盘引导,并提供其系统信息,如主机名、时区等。


    # boot diskn
    
  17. 引导系统后,以超级用户身份登录以验证系统信息。


    hostname console login:

示例 29–1 复制带有 VTOC 标签的磁盘 (dd)

本示例说明如何将主磁盘(带有 VTOC 标签) /dev/rdsk/c0t0d0s2 复制到目标磁盘 /dev/rdsk/c0t2d0s2


# touch /reconfigure

# init 0

ok boot

# dd if=/dev/rdsk/c0t0d0s2 of=/dev/rdsk/c0t2d0s2 bs=128k

# fsck /dev/rdsk/c0t2d0s2

# mount /dev/dsk/c0t2d0s2 /mnt 

# cd /mnt/etc

# vi vfstab

(Modify entries for the new disk)

# cd /

# umount /mnt

# init 0

# boot disk2 -s

# sys-unconfig

# boot disk2


示例 29–2 复制带有 EFI 标签的磁盘 (dd)

在以前的 Solaris 发行版中,片 2 (s2) 用于表示整张磁盘。在带有 EFI 标签的磁盘上,必须使用稍有不同的过程来克隆或复制大于 1 TB 的磁盘,以使克隆磁盘的 UUID 具有唯一性。如果没有为克隆磁盘创建新的标签,则其他软件产品在遇到重复的 UUID 时可能会损坏带有 EFI 标记的磁盘上的数据。

例如:

  1. 克隆带有 EFI 标记的磁盘。例如:


    # dd if=/dev/rdsk/c0t0d0 of=/dev/rdsk/c0t2d0 bs=128k
    
  2. 传输要复制到 fmthard 命令中的磁盘的 prtvtoc 输出,以便为克隆磁盘创建新的标签。例如:


    # prtvtoc /dev/rdsk/c0t0d0 | fmthard -s - /dev/rdsk/c0t2d0
    

有关 EFI 磁盘标签的更多信息,请参见带有 EFI 磁盘标号的多 TB 磁盘支持