0%

Ubuntu系统硬盘克隆过程记录

1 前情提要

当时购买工作站时不是自己挑选的配置,总价2万的工作站(Dell Precision 5820)竟然只给配了一块4T的希捷企业级机械硬盘,唉……本人日常是通过局域网内的远程桌面控制工作站的(参考),在日常使用中可以感受到机械硬盘读取速率导致的画面卡顿,而且,在跑视觉算法时经常是硬盘读取速度限制了算法的运行速度;再加上有一次在工作站运行时摔倒了一次,当时就连续多次启动失败,还好后来重新插拔硬盘后又可以正常运行了,但从那以后我就觉得这个硬盘不太可靠了,进一步增加了自己要换硬盘的信念。最近正好赶上实验室配件购买,所以就决定升级一下内存并更换这块不靠谱的硬盘。

更换SSD硬盘有两种选择:当前常见的NVME M2 SSD,或者是SATA3 企业级固态硬盘,考虑到企业级固态硬盘的超高售价以及提升不大的读取速度,决定选择使用M2 SSD硬盘,日常记得常做数据备份就可以。当时工作站到手的时候就拆机看了,主板上没有M2接口的硬盘位,要想使用M2硬盘有两种方案:方案一是使用官方的PCIe SSD FlexBay套件

image-20241125114801255

该方案优点是可以实现NVME硬盘的热插拔,而且位于硬盘仓位里,有系统风扇可以提供散热;缺点是,咨询了Dell的代理商,该方案由于售价高(上千元)、操作麻烦已经基本被弃用了,他们自己都不用这种方案,而是使用PCIe转接卡,这就是所谓的方案二。使用PCIe转接卡方案的优势是价格低(几十元)、操作便捷,但缺点就是散热问题,不仅没有系统风扇直接降温,而且还离显卡更近;此外,还需要确认主板支持NVME硬盘启动,这个已经跟代理商沟通过没问题的。最终,权衡之后选择使用方案二。

2 材料准备

转接卡使用的是绿联单盘位转接卡,最高支持32Gbps的传输速度(应该是PCIe3.0 x4)。但是要是要让我重新选的话,我不会选这个转接卡了,因为其硬盘固定方式不可靠,它是通过一个螺栓将硬盘卡在转接卡上,而不是常规使用螺丝帽来固定的,如下图所示:

image-20241125130446486

由于该螺栓中间空隙的高度与硬盘厚度并不一致,导致硬盘按照这种方式安装后可以上下晃动,虽然不至于影响金手指处的连接,但是总觉得不靠谱;因此本人没有按照这种图示的方式进行连接,而是将螺栓放置到背面,仍使用传统的螺丝帽固定硬盘,毫不松动、非常可靠。

至于硬盘,本想选择与机械硬盘一样存储容量的型号,但是无奈三星4T硬盘当前价格已经到了2600左右(2024年11月),价格实在是有点难接受,只能购买2T版本的了;由于支持PCIe3.0的980型号当时京东上没有2T版本的,并考虑到硬盘的散热问题,所以最终选择了PCIe4.0版本的990PRO 散热片版

image-20241125131808256

这就是合体后的样子了:

02

3 硬盘克隆过程

在Windows系统下硬盘克隆是件很简单的事,有很多工具可以直接使用,如DiskGenius等;而在Ubuntu下,稍微会麻烦一点,有推荐使用台湾出品的Clonezilla(再生龙)软件的,也有推荐直接使用dd命令进行全文件复制的,大概看了一下不同方法的操作流程,最终决定使用更简单的dd命令进行操作,记录一下操作过程。

3.1 制作U盘启动盘

制作一个Ubuntu系统盘,可参考该教程使用Rufus制作;在这个时间里可以将转接卡安装到工作站中,注意查看PCIe通道数,这个绿联转接卡是4通道的;建议在一切操作之前备份重要数据

3.2 旧硬盘瘦身

进入U盘启动模式,选择Try Ubuntu,注:本节后续的所有操作均是在该模式下进行的。

进入系统之后先查看现有的硬盘,使用sudo fdisk -l命令查看当前硬盘的分区以及类型(注:这是后期补的,操作过程中没有及时记录):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-❯ sudo fdisk -l
Disk /dev/nvme0n1: 1.82 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: Samsung SSD 990 PRO with Heatsink 2TB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 25A90423-66B9-46A2-9BFA-A8BCBE13416D

Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 978943 976896 477M Microsoft basic data
/dev/nvme0n1p2 978944 1957887 978944 478M Linux filesystem
/dev/nvme0n1p3 1957888 22929407 20971520 10G Linux swap
/dev/nvme0n1p4 22929408 442359807 419430400 200G Linux filesystem
/dev/nvme0n1p5 442359808 3907028991 3464669184 1.6T Linux filesystem

可以看到分区类型为gpt,一共有5个分区,为/dev/sda1-/dev/sda5(原来的机械硬盘),分别对应efi、boot、swap、/和/home。要想进行克隆,则需要将新硬盘设置为完全相同的分区模式,此处使用Ubuntu自带的gparted对硬盘进行分区,此处的分区大小设置应与之前相同,但由于新硬盘小于旧硬盘,所以需要先对旧硬盘进行“瘦身”。

旧硬盘的“瘦身”也是通过gparted完成的,将未使用的分区进行压缩,本人当时是在/home下有大量的未占用空间,所以将其瘦身,直至新硬盘容量足以容纳现有的分区。(注:该过程对于机械硬盘来说处理时间较久,本人就曾因为时间过久以为卡死了,后来发现确实需要蛮长时间的)

3.3 硬盘克隆

新分区完之后就是简单的数据拷贝了,这里使用dd命令对各个分区的数据进行完全拷贝:

1
2
3
4
5
dd if=/dev/sda1 of=/dev/nvme0n1p1
dd if=/dev/sda2 of=/dev/nvme0n1p2
dd if=/dev/sda3 of=/dev/nvme0n1p3
dd if=/dev/sda4 of=/dev/nvme0n1p4
dd if=/dev/sda5 of=/dev/nvme0n1p5

如果想查看拷贝进程,可以新开一个终端,输入以下命令:

1
watch -n 5 killall -USR1 dd

这样使用dd进行完全拷贝之后,会使得新硬盘的各个分区uuid与旧硬盘完全相同,如果想要新旧硬盘一起使用的话,就会出现问题,可以使用uuidgen命令更新新硬盘分区的uuid;而我是直接用旧硬盘替换新硬盘的,所以不存在这个问题。现在拔掉旧硬盘,重启电脑,设置启动顺序之后,就可以正常开机了,与旧硬盘下状态完全一样,不过速度已经起飞了。

4 NVME硬盘情况查看

使用dmesg查看PCIe接口设备的连接速度:

1
2
3
4
5
6
-❯ sudo dmesg | grep Gb
[ 0.470410] pci 0000:17:00.0: 126.016 Gb/s available PCIe bandwidth, limited by 8.0 GT/s PCIe x16 link at 0000:16:00.0 (capable of 252.048 Gb/s with 16.0 GT/s PCIe x16 link)
[ 0.473664] pci 0000:65:00.0: 126.016 Gb/s available PCIe bandwidth, limited by 8.0 GT/s PCIe x16 link at 0000:64:00.0 (capable of 252.048 Gb/s with 16.0 GT/s PCIe x16 link)
[ 1.028825] ahci 0000:00:17.0: AHCI 0001.0301 32 slots 8 ports 6 Gbps 0xff impl SATA mode
[ 1.033983] pci 10000:01:00.0: 31.504 Gb/s available PCIe bandwidth, limited by 8.0 GT/s PCIe x4 link at 10000:00:00.0 (capable of 63.012 Gb/s with 16.0 GT/s PCIe x4 link)
[ 1.532754] ata7: SATA link up 1.5 Gbps (SStatus 113 SControl 300)

前两个是显卡,PCIe带宽为126.016 Gb/s,是PCIe3.0 x16速度,该显卡实际支持的是PCIe4.0 x16速度;第四个是新安装的NVMe硬盘,PCIe带宽为31.504 Gb/s,是是PCIe3.0 x4速度,该硬盘实际支持的是PCIe4.0 x4速度;PCIe版本速度对应情况查看该文章。使用Ubuntu自带的Disk软件检测读取速度:

image-20241125153551207

使用nvme-cli工具查看硬盘实时状况:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-❯ sudo nvme smart-log /dev/nvme0n1
Smart Log for NVME device:nvme0n1 namespace-id:ffffffff
critical_warning : 0
temperature : 34 C (307 Kelvin)
available_spare : 100%
available_spare_threshold : 10%
percentage_used : 0%
endurance group critical warning summary: 0
data_units_read : 3,315,606
data_units_written : 2,897,004
host_read_commands : 358,623,991
host_write_commands : 2,956,956
controller_busy_time : 41
power_cycles : 26
power_on_hours : 3
unsafe_shutdowns : 18
media_errors : 0
num_err_log_entries : 0
Warning Temperature Time : 0
Critical Composite Temperature Time : 0
Temperature Sensor 1 : 34 C (307 Kelvin)
Temperature Sensor 2 : 35 C (308 Kelvin)
Thermal Management T1 Trans Count : 0
Thermal Management T2 Trans Count : 0
Thermal Management T1 Total Time : 0
Thermal Management T2 Total Time : 0

至此,硬盘克隆过程结束。