如何给装有 Linux 的笔记本更换 ssd,不重装系统的情况下?

2020-08-03 16:41:38 +08:00
 phpfpm

目前一块 500G 的 hdd

fdisk -l:
  
Disk /dev/sda: 465.78 GiB, 500107862016 bytes, 976773168 sectors
Disk model: ST500LM021-1KJ15
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: F4E44CEB-7501-40CD-949A-EF8BA7BFC1AF
  
Device     Start       End   Sectors   Size Type
/dev/sda1   2048      4095      2048     1M BIOS boot
/dev/sda2   4096 976771071 976766976 465.8G Linux filesystem
  
df -h:
  
/dev/sda2       458G   24G  411G   6% /

手头有一块 ssd,240G 的,想直接替换一下

其他的工具有:

其他的 linux 的电脑

支持双硬盘的 sata-usb dock

其他的 windows 的电脑

想问下怎么搞最简单的 best practice ?

Thanks♪(・ω・)ノ

3581 次点击
所在节点    问与答
35 条回复
Tink
2020-08-03 16:44:34 +08:00
直接 rsync 拷贝,考完了编辑 fstab,修改引导就行了
phpfpm
2020-08-03 16:49:38 +08:00
@Tink 这块硬盘还有一个 bios boot 分区,这个 rsync 能搞定吗。。

可以接受离线一小段时间

编辑 fstab 是指编辑新硬盘的 fstab ?
a719114136
2020-08-03 16:57:54 +08:00
树莓派用 dd 可以整个系统以及引导,不知道对于完整的 linux 行不行

```
sudo dd bs=4M if=/dev/mmcblk0 of=/dev/sda
```
zhve2x4
2020-08-03 17:07:04 +08:00
我以前的做法是直接对分区打 tar 包。然后通过 u 盘引导进入 liveCD 的系统:解压 tar 到新硬盘的新分区,grep -rn '原分区 uuid' / 找到后修改, 命令修复 efi 分区,命令修复 grub2 等。
phpfpm
2020-08-03 17:12:49 +08:00
@a719114136 我没试过,磁盘不一样大小也可以吗
plko345
2020-08-03 17:13:11 +08:00
dd 吧,有 boot bios,其它方案就不太清楚了
raaaaaar
2020-08-03 17:14:14 +08:00
注意分区和引导程序就行
uncat
2020-08-03 17:18:28 +08:00
之前在 archlinux 的论坛潜水的时候. 大家的说法是用 `dd` #3 说的那个.

我用的是 `rsync` #1 说的这个. 要更新 `/boot` 和 `/etc/fstab` 和重建 `initramfs` (这条命令相关的: `mkinitcpio`)

不过. 如果你要用 `rsync`. 建议先看看 arch 的 wiki: https://wiki.archlinux.org/index.php/migrate_installation_to_new_hardware

会更好一点
phpfpm
2020-08-03 17:21:27 +08:00
@zhve2x4 我搜了一下 uuid 只有 fstab 里面有

```
foo@db:~$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/74e0ce4b-9915-4c5b-9a2a-76ceb67f64fc / ext4 defaults 0 0
/swap.img none swap sw 0 0
foo@db:~$ ls /dev/disk/by-uuid/
74e0ce4b-9915-4c5b-9a2a-xxx
```

是不是我 dd 全盘之后直接改一下这个 fstab 就可以了?
phpfpm
2020-08-03 17:24:18 +08:00
@plko345 其实看了这么多我觉得我还不如重装吧。。

这台机器上只有 mysql,再配置一遍也没那么麻烦。。。
a719114136
2020-08-03 17:33:06 +08:00
@phpfpm 新盘必须要>=旧盘
phpfpm
2020-08-03 17:35:30 +08:00
@a719114136 如果小呢,只能 rsync 了?
phpfpm
2020-08-03 18:09:11 +08:00
@zhve2x4 仔细 grep 了一下 /boot/grub/grub.cfg 里面还真多。。

感觉有点坑啊
Shing
2020-08-03 18:17:25 +08:00
前段时间刚给 manjaro 电脑升级 nvme sn750

方法很简单,其实也是直接 dd 复制对烤
首先准备一个 usb 下载个 ubuntu live 制作启动盘,后续大部分操作都在这个启动盘,然后把老盘整个磁盘用 dd 命令烤到新盘
对烤后的 uuid 都是对得上的,但是由于新盘比老盘大,而且 swap 分区位于老盘的最后,所以扩容新盘的时候,就得把新盘的 swap 删了重建,于是就造成 swap 在 grub.cfg 里面的 uuid 值变了,于是,你要做的就是把老盘的 uuid 全部改成新盘的 uuid 就好了。
Shing
2020-08-03 18:18:42 +08:00
@phpfpm 如果小了,就先需要在新盘建立与老盘相对应的分区表,再把数据从老盘 rsync 到新盘,修改 grub 和 fstab 里的 uuid
phpfpm
2020-08-03 18:18:47 +08:00
@Shing 但是如果新的比老的小是不是连 dd 的资格都没有了
phpfpm
2020-08-03 18:21:01 +08:00
@Shing 感觉这样我还不如重装了。。。。。
┓(;´_`)┏
autoxbc
2020-08-03 18:35:12 +08:00
对于两个硬盘的复制:
1. dd 会原样复制分区表,导致大转小会失败,小转大剩余容量无法利用
2. rsync 看起来是基于目录的操作逻辑,大部分教程都有一串很长的参数,不容易理解
3. 专门做这个工作的工具首推 Clonezilla,其后端核心是 Partimage 和 Partclone
4. 我常用的是 Partimage,是个控制台下的图形界面的向导式工具,简单易懂
phpfpm
2020-08-03 18:43:18 +08:00
@autoxbc cooool !!!

所以我是不是把俩硬盘插到 usb dock 上,找一台能用的 ubuntu 的本子,对拷一下就可以了?
Osk
2020-08-03 18:54:14 +08:00
我个人是用 rsync 或 cp 复制系统。
需要注意:
boot 分区,如果有。
initramfs 可能需要 update
grub2 需要安装到新磁盘和更新配置。
fstab 需要作一点点修改。


现在我在安装前就会考虑 lvm 或 btrfs,两者都很方便,除了 boot 分区需要迁移外,其它一律不用管。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/695290

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX