Linux下使用dd工具备份/恢复NVMe磁盘的设备节点选择及相关疑问
Linux下使用dd工具备份/恢复NVMe磁盘的设备节点选择及相关疑问
嗨,我来帮你把NVMe磁盘这俩设备节点的事儿说清楚,当初我第一次接触NVMe的时候也搞混过,刚好能给你掰明白:
一、备份/恢复整个磁盘,选哪个设备节点?
直接给你拍板:必须用/dev/nvme0n1,绝对别碰/dev/nvme0。
给你举两个实际能用的命令例子(记得替换成你自己的镜像文件路径):
# 备份整个NVMe磁盘到镜像文件,bs设大些能提速,status参数能看实时进度 dd if=/dev/nvme0n1 of=/mnt/external_drive/nvme_full_backup.img bs=4M status=progress
恢复的时候也是完全对着/dev/nvme0n1写:
# 从镜像恢复到NVMe磁盘,conv=fsync确保数据完全写入磁盘,避免缓存残留 dd if=/mnt/external_drive/nvme_full_backup.img of=/dev/nvme0n1 bs=4M status=progress conv=fsync
二、nvme0和nvme0n1的作用到底有啥区别?
这得从NVMe协议的设计逻辑说起:
/dev/nvme0是NVMe控制器设备:它对应的是主板上的NVMe控制器硬件本身,只能用来做和控制器相关的操作——比如升级固件、查看控制器健康状态、调整控制器参数这些,它根本不是存储用户数据的“磁盘实体”,你要是对着它用dd,不仅啥数据都备份不到,还可能搞坏控制器配置,纯纯瞎折腾。/dev/nvme0n1是NVMe命名空间设备:这才是你真正要找的“整个磁盘”!NVMe协议里,一个控制器可以同时管理多个独立的“命名空间”,每个命名空间就相当于一块独立的物理磁盘。你看到的nvme0n1pX就是这个命名空间上划分出来的各个分区,和SATA磁盘的/dev/sdaX是完全对应的逻辑。
三、操作前的几个重要提醒
- 备份/恢复前,一定要确认
nvme0n1的所有分区都没挂载,否则要么备份的数据不完整,要么恢复时直接搞坏正在使用的文件系统。可以用umount /dev/nvme0n1pX先卸载分区,或者用lsblk命令核对挂载状态。 - dd有个外号叫“磁盘毁灭者”,敲命令前一定要反复核对
if(输入源)和of(输出目标),别把备份镜像写到正在用的系统盘上,那可就直接凉凉了。 - 动手前用
lsblk或者fdisk -l /dev/nvme0n1确认下设备对应的磁盘大小、分区数量,确保你选的是自己要操作的那块NVMe盘,别把外接硬盘或者其他存储设备搞错了。
备注:内容来源于stack exchange,提问作者TSG




