菜鸟科技网

raw命令在Linux中如何使用?

raw 命令主要用于直接与块设备(如硬盘分区、U盘等)进行底层的、未经文件系统处理的交互,它最核心的功能是绕过操作系统的文件系统缓存,直接读取或写入设备的原始扇区数据。

raw命令在Linux中如何使用?-图1
(图片来源网络,侵删)

这对于一些非常底层的系统维护任务至关重要。


核心概念:raw 是什么?

在深入命令之前,理解 raw 的本质很重要:

  1. 块设备:Linux 中像硬盘、U盘、SD卡这样的设备被称为块设备,它们由一个个固定大小的“块”(通常是 512 字节或 4KB)组成,文件系统(如 ext4, NTFS)是在这些块之上构建的,用于管理文件和目录。
  2. 绕过文件系统:当你使用 cat file.txt > /dev/sdb1 这样的命令时,数据需要先经过内核的文件系统缓存,然后由文件系统驱动将其写入到 /dev/sdb1 的特定位置,而 raw 命令直接与设备驱动对话,将数据写入设备的最开始位置(或指定位置),完全无视文件系统。
  3. 主要用途
    • 磁盘镜像:将一个物理设备完整地复制到另一个设备或文件中,常用于制作系统备份或克隆磁盘。
    • 数据恢复:当文件系统损坏时,可以直接读取原始扇区来尝试恢复数据。
    • 低级格式化:对存储设备进行底层的数据擦除。

dd vs raw:一个常见的混淆

很多人会把 rawdd 命令混淆,因为它们都能处理原始设备数据,但实际上,raw 是一个独立的命令,而 dd 是一个更通用、更强大的工具。

raw 命令

raw命令在Linux中如何使用?-图2
(图片来源网络,侵删)
  • 语法更简单:专注于最常见的“设备到设备”或“设备到文件”的克隆操作。
  • 更安全:通常有进度条和更友好的提示,减少了因误操作导致数据灾难的风险。
  • 现代性:可以看作是 dd 的一个更友好的“包装器”或替代品,专门为磁盘克隆任务设计。

dd 命令

  • 功能极其强大:被誉为“Linux 中的瑞士军刀”,可以转换和复制文件。
  • 语法复杂:参数众多(如 if, of, bs, count, conv 等),初学者容易记错。
  • 危险性高:因为其强大的底层操作能力,dd 有一个外号叫 "Disk Destroyer"(磁盘毁灭者),一个错误的参数(比如把 ofif 写反了)就会导致数据永久丢失。

对于简单的磁盘克隆任务,raw 命令通常是更安全、更便捷的选择,对于需要精确控制转换、处理特殊数据格式或进行复杂文件操作的场景,dd 仍然是不可或缺的工具。


raw 命令的基本用法

raw 命令的基本语法非常直观:

raw [选项] <源> <目标>
  • <源>:可以是块设备(如 /dev/sda)或一个普通文件。
  • <目标>:可以是块设备(如 /dev/sdb)或一个普通文件。

常用选项

raw命令在Linux中如何使用?-图3
(图片来源网络,侵删)
选项 全称 描述
-v, --verbose verbose 显示详细的操作过程和进度。
-d, --device device 指定源或目标是设备,这是默认行为。
-f, --file file 指定源或目标是文件。
-h, --help help 显示帮助信息并退出。
-V, --version version 显示版本信息并退出。

实用示例

在执行任何涉及磁盘设备的操作之前,请务必再三确认你操作的设备是正确的! 错误的设备名会导致所有数据被永久覆盖。

将一个硬盘完整克隆到另一个硬盘(最常见的用法)

这个操作会将 /dev/sda 的所有内容(包括分区表、引导扇区、所有分区和数据)逐字节地复制到 /dev/sdb/dev/sdb 上的原有数据将被完全覆盖。

# 将 /dev/sda 克隆到 /dev/sdb
sudo raw /dev/sda /dev/sdb

执行后,你会看到类似下面的进度条,让你了解复制进度:

Copying /dev/sda to /dev/sdb
1024+0 records in
1024+0 records out
524288 bytes (524 kB, 512 KiB) copied, 0.00101507 s, 517 MB/s
Total: 123456/7890123 (1.5%) ETA: 00:10:30

将硬盘克隆成一个磁盘镜像文件

如果你想备份整个硬盘到一个文件中,可以这样操作:

# 将 /dev/sda 克隆到当前目录下的 sda_backup.img 文件
sudo raw /dev/sda sda_backup.img

这个 sda_backup.img 文件的大小将与 /dev/sda 的总容量完全相同。

从磁盘镜像文件恢复到硬盘

这是上述操作的逆过程,用于从备份恢复系统。

# 将 sda_backup.img 文件恢复到 /dev/sdb
sudo raw sda_backup.img /dev/sdb

⚠️ 严重警告:此操作会彻底擦除 /dev/sdb 上的所有数据!请确保 /dev/sdb 是正确的目标设备。

使用 --file--device 选项显式指定

虽然 raw 命令通常能自动判断源和目标的类型,但显式指定可以增加清晰度,避免潜在错误。

# 明确指定源是设备,目标是文件
sudo raw --device --file /dev/sdc my_usb_backup.img
# 明确指定源是文件,目标是设备
sudo raw --file --device my_usb_backup.img /dev/sdd

重要注意事项与最佳实践

  1. 数据安全第一!

    • 再三确认设备名:在执行 rawdd 之前,使用 lsblkfdisk -l 命令仔细查看你的磁盘和分区布局,确保你操作的设备(如 /dev/sda, /dev/sdb)是正确的。
    • 备份重要数据:任何对磁盘的低级操作都有风险,在进行操作前,务必备份重要数据。
  2. 设备必须大小兼容

    • 如果目标设备(/dev/sdb)比源设备(/dev/sda)小,操作会失败。
    • 如果目标设备比源设备大,raw 会只复制源设备大小的数据到目标设备的前面,目标设备剩余的空间不会被使用,也不会被清零。
  3. 谨慎使用 --progress (如果可用)

    • 一些版本的 raw 可能支持 --progress 选项来显示更详细的进度条,如果可用,它可以帮助你监控长时间运行的克隆任务。
  4. raw 命令的可用性

    • raw 命令并不是所有 Linux 发行版的默认组件,它通常来自 util-linux 包,如果你的系统中没有这个命令,你可以使用 apt, yum, dnfpacman 等包管理器来安装它。
      # Debian / Ubuntu
      sudo apt-get install util-linux

    CentOS / RHEL / Fedora

    sudo yum install util-linux

    或者

    sudo dnf install util-linux


dd 命令对比参考

为了让你更清晰地理解,这里列出 dd 实现相同功能的命令:

任务 raw 命令 dd 命令
克隆硬盘 sudo raw /dev/sda /dev/sdb sudo dd if=/dev/sda of=/dev/sdb bs=4M status=progress
制作镜像 sudo raw /dev/sda sda.img sudo dd if=/dev/sda of=sda.img bs=4M status=progress
恢复镜像 sudo raw sda.img /dev/sdb sudo dd if=sda.img of=/dev/sdb bs=4M status=progress

dd 命令参数解释

  • if=: 输入文件。
  • of=: 输出文件。
  • bs=4M: 设置块大小为 4MB,使用较大的块 size 可以提高复制速度。
  • status=progress: 显示实时复制进度和速度。

希望这份详细的解释能帮助你完全理解 raw 命令在 Linux 中的作用和用法!

分享:
扫描分享到社交APP
上一篇
下一篇