我想在 Linux 下使用 dd 来制作磁盘的备份映像。对于 sata 设备,磁盘有 /dev/sda,每个分区有 /dev/sdaX。
但是对于这个 nvme,我看到了 /dev/nvme0、/dev/nvme0n1 和 /dev/nbme0n1pX。最后一个显然是分区,但是我应该使用前者中的哪一个来备份我的磁盘?(nvme0 与 nvme0n1)。
有 2 个设备代表磁盘的目的是什么?
当我恢复磁盘时,我应该写入哪个设备?
我想在 Linux 下使用 dd 来制作磁盘的备份映像。对于 sata 设备,磁盘有 /dev/sda,每个分区有 /dev/sdaX。
但是对于这个 nvme,我看到了 /dev/nvme0、/dev/nvme0n1 和 /dev/nbme0n1pX。最后一个显然是分区,但是我应该使用前者中的哪一个来备份我的磁盘?(nvme0 与 nvme0n1)。
有 2 个设备代表磁盘的目的是什么?
当我恢复磁盘时,我应该写入哪个设备?
您应该使用
/dev/nvme0n1
它来对整个磁盘进行映像处理。这是与 nvme 设备关联的块设备;您可以通过查看设备主/次设备号来验证这一点:主编号259对应的块设备:
主设备 238 对应于“nvme”设备:
块设备是“磁盘”;您可以从该设备创建备份,然后将其写回另一个块设备 - 无论目标是 nvme 还是其他东西。
/dev/nvme0
是一个 nvme 设备,如果您需要与底层 nvme 控制器交互(例如使用nvme
cli) ,则可以使用它。/dev/nvme0n1
,并且您也需要相同的目标进行恢复。NVMe 的规范包含“命名空间”的概念。直接引用官方资源https://nvmexpress.org/resource/nvme-namespaces/:
如果这听起来有点技术性,那确实如此。从实际角度来看,您可以将 NVMe 命名空间视为由设备本身(而不是主机)理解和管理的分区,并且可以选择为每个命名空间独立控制设备的某些功能和配置。
这样您就可以做一些有趣的事情,例如仅在 NVMe 设备的一部分上使用 OPAL SED 功能,或者将设备的不同部分呈现给系统的不同部分而无需对其进行分区。NVMe 命名空间也是多路径与 NVMe 协同工作的一个组成部分。
但是,作为命名空间的虚拟块设备与 NVMe 控制器并不相同。因此,对于系统中的每个 NVMe 控制器,Linux 为该控制器提供了一个字符设备 (
/dev/nvmeX
),用于发出管理命令(例如用于重新配置命名空间的命令),并为该控制器上的每个命名空间提供了一个块设备 (/dev/nvmeXnY
)。对于几乎所有商业出货的 NVMe 设备,都会有一个覆盖整个设备的单一命名空间(因为这允许您插入设备并立即使用它而无需任何配置,除非您想对命名空间做一些不同的事情),所以您只会看到每个 NVMe 设备的一个块设备。
顺便说一句,我强烈赞同你应该考虑
dd
备份以外的其他东西。它不能进行增量备份,它实际上不能在备份的系统上可靠地进行稳定备份,它完全依赖于外部工具进行重复数据删除、压缩和加密,而且你不太可能需要它保存的所有额外状态(没有任何理智的东西会关心磁盘上的块布局,除了备份软件之外几乎没有任何理智的东西会关心 inode 编号,真正的备份软件无法转储的少数扩展属性无论如何都应该在恢复时手动重新生成,等等)。