目前一块 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♪(・ω・)ノ
1
Tink 2020-08-03 16:44:34 +08:00 via Android
直接 rsync 拷贝,考完了编辑 fstab,修改引导就行了
|
2
phpfpm OP |
3
a719114136 2020-08-03 16:57:54 +08:00 1
树莓派用 dd 可以整个系统以及引导,不知道对于完整的 linux 行不行
``` sudo dd bs=4M if=/dev/mmcblk0 of=/dev/sda ``` |
4
zhve2x4 2020-08-03 17:07:04 +08:00
我以前的做法是直接对分区打 tar 包。然后通过 u 盘引导进入 liveCD 的系统:解压 tar 到新硬盘的新分区,grep -rn '原分区 uuid' / 找到后修改, 命令修复 efi 分区,命令修复 grub2 等。
|
5
phpfpm OP @a719114136 我没试过,磁盘不一样大小也可以吗
|
6
plko345 2020-08-03 17:13:11 +08:00 via Android
dd 吧,有 boot bios,其它方案就不太清楚了
|
7
raaaaaar 2020-08-03 17:14:14 +08:00 via Android
注意分区和引导程序就行
|
8
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 会更好一点 |
9
phpfpm OP @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 就可以了? |
11
a719114136 2020-08-03 17:33:06 +08:00 via Android
@phpfpm 新盘必须要>=旧盘
|
12
phpfpm OP @a719114136 如果小呢,只能 rsync 了?
|
14
Shing 2020-08-03 18:17:25 +08:00 1
前段时间刚给 manjaro 电脑升级 nvme sn750
方法很简单,其实也是直接 dd 复制对烤 首先准备一个 usb 下载个 ubuntu live 制作启动盘,后续大部分操作都在这个启动盘,然后把老盘整个磁盘用 dd 命令烤到新盘 对烤后的 uuid 都是对得上的,但是由于新盘比老盘大,而且 swap 分区位于老盘的最后,所以扩容新盘的时候,就得把新盘的 swap 删了重建,于是就造成 swap 在 grub.cfg 里面的 uuid 值变了,于是,你要做的就是把老盘的 uuid 全部改成新盘的 uuid 就好了。 |
15
Shing 2020-08-03 18:18:42 +08:00
@phpfpm 如果小了,就先需要在新盘建立与老盘相对应的分区表,再把数据从老盘 rsync 到新盘,修改 grub 和 fstab 里的 uuid
|
18
autoxbc 2020-08-03 18:35:12 +08:00 1
对于两个硬盘的复制:
1. dd 会原样复制分区表,导致大转小会失败,小转大剩余容量无法利用 2. rsync 看起来是基于目录的操作逻辑,大部分教程都有一串很长的参数,不容易理解 3. 专门做这个工作的工具首推 Clonezilla,其后端核心是 Partimage 和 Partclone 4. 我常用的是 Partimage,是个控制台下的图形界面的向导式工具,简单易懂 |
19
phpfpm OP |
20
Osk 2020-08-03 18:54:14 +08:00 via Android
我个人是用 rsync 或 cp 复制系统。
需要注意: boot 分区,如果有。 initramfs 可能需要 update grub2 需要安装到新磁盘和更新配置。 fstab 需要作一点点修改。 现在我在安装前就会考虑 lvm 或 btrfs,两者都很方便,除了 boot 分区需要迁移外,其它一律不用管。 |
21
autoxbc 2020-08-03 18:54:20 +08:00
@phpfpm #19 Partimage 仍然是基于分区来复制,复制之前的手动分区,复制之后的修改 fstab 和 grub.cfg 还是需要的
手动分区我更喜欢用 WinPE 来操作,Linux 读 Windows 生成的分区表很少出错,反过来则不一定 USB Dock 注意供电问题,不要预设板载 USB 3.0 有足够的输出功率 |
22
phpfpm OP |
24
Osk 2020-08-03 19:29:30 +08:00 via Android
@phpfpm 不管它是 /boot 抑或是 /boot/efi 还是咋的,反正有 bootloader 的分区要动。
lvm 可以把底层的磁盘布局抽象了,/ 等在 lv 中,新加入的硬盘加入 vg 内,然后移除旧硬盘的 pv,只需要重新安装 bootloader 就好,理论上系统运行中也可以实现迁移,这就是用 lvm 的优势之一。 而 btrfs 也有类似的功能,甚至比 lvm 更好,因为 btrfs 知道哪些 block 是需要迁移到新磁盘的,会更快,也可以在线迁移而不需要启动到 LiveCD 中,现在的 linux,这里挂个 tmpfs,那里放个 lock 文件,用 cp 或 rsync 在线复制系统会很痛苦,exclude 一长串,btrfs 和 lvm 就不一样。 另外,还有一点,不过我未验证过:xp 或 rsync 等遇到小文件会让人崩溃,而 btrfs 或 lvm 估计会大部分操作都是连续读写 io,速度有时会更快。仅仅是我的猜测,我没观察过 btrfs 和 lvm 迁移的 io 类型,lvm 有时无法与上层的 fs 配合好可能相当于 dd,对硬件的影响比较大吧。 |
25
gansteed 2020-08-03 19:42:24 +08:00
你可以看看这个: https://jiajunhuang.com/articles/2020_05_22-linux_clone_sys.md.html 我前不久才迁移过一次
|
26
Osk 2020-08-03 19:42:39 +08:00 via Android
另外楼主的电脑有 bios boot 分区却无 esp 分区,说明是 bios/legacy 模式启动的,新硬盘上要记住用 gdisk 分一个 bios boot 分区哦,grub2 推荐在 1M 以上,建议 2M.
然后分一个 / 分区,在其它 linux 上 cp /或 rsync /,然后 chroot,grub-install /dev/sdx,update-grub2,编辑 fstab 就完事 |
28
Osk 2020-08-03 20:11:31 +08:00 via Android
@phpfpm 不矛盾,mbr 磁盘中,grub 会将自己的一部分代码(stage1 吧,忘了)放在 mbr 到第一个磁盘分区之间的区域,该区域大约有 2M 左右空间,之前 grub2 出现过 bug,未能正确处理好这部分写入操作,把第一个分区写炸了,印象中是如此。
gpt 分区中没了这部分空间,微软就搞出了 msr (但不是用于放 bootmgr 代码 ),grub2 也提出了 bios boot 分区,用来放 mbr 中嵌入区的引导代码。 |
29
Osk 2020-08-03 20:14:50 +08:00 via Android
@phpfpm 回答偏了,mbr+legacy/bios boot 和 gpt+uefi 这两个组合方式的限制是微软 client OS 的限制,据说 Windows Server 都没这限制,Linux 更不管了
|
30
alexkkaa 2020-08-03 20:26:40 +08:00 via Android
clonezilla 复制过去就行 不用改
|
31
xing2387 2020-08-03 23:37:15 +08:00 1
emmmmm 。。 我觉得这是很简单的事情。。。不会就干脆劝退 ubuntu 算了。。。(狗头保命
1. 要能卸载这个系统分区 -> 需要个 Live cd 之类的,用安装镜像写进 U 盘启动选“try ubuntu”就行。 2. 新硬盘可能比原有分区小 -> 调整分区大小,用自带的 gparted 就可以啦(有 GUI 的)。 3. 需要将分区数据拷到新硬盘 -> dd 就完事了,dd 完数据之后应该是能 mount 挂载的,挂载一下验证一下。 =========== 保险方法: ============ 4. 启动到新硬盘上 -> 重启进入原硬盘上的 ubuntu,执行 update-grub 命令,会将新硬盘的系统识别到并更新到 grub 的配置里。再重启,grub 选项应该会多一个新硬盘上的 ubuntu,选他,就妥妥的进了新硬盘的 ubuntu 。 5. 安装引导 -> 在进了新硬盘的 ubuntu 后,grub-install 安装 grub 再 update-grub 更新配置。 6. 其他工作 -> 注释掉 fstab 中多余的分区挂载配置,只保留 /写入新硬盘的,uuid 可以在 gparted 上查到。 7. 完事了。 =========== 不保险但是很快的方法: ============== 4. 对新硬盘使用 grub-install,拔掉旧硬盘。或直接用 live cd 的 grub 。 5. 重启手动 grub:a. set root=xxx; b. linux xxx; c. initrd xxx; d. boot 。 6. 进去新硬盘的系统后就懂得都懂.jpg 了 |
32
xing2387 2020-08-03 23:42:35 +08:00
补充一下没看清楚题目。。。1. 原来不是专门指的 ubuntu 而是 linux 。。。大同小异没差。。
2. 原来是 gpt,不算 legacy bios 。。。这个就当我前面那堆 12345 是说废话。。嫌麻烦没用过 gpt 。。。 |
33
wccc 2020-08-04 00:04:42 +08:00 via iPhone
timeshift 这个软件备份到一个硬盘然后再恢复到新的硬盘
|
35
zhve2x4 2020-08-04 09:17:05 +08:00
@phpfpm 没必要 dd 呀,直接在新硬盘上用 liveCD 分好区,然后用 tar 的方式备份恢复。把 os 恢复到新硬盘后,执行" grep -rn '原分区 uuid' 新硬盘分区所挂的路径" 改好 uuid 。然后 chroot 到新硬盘,修复引导就搞定了。你可以选择性参考 https://www.cnblogs.com/mind-water/p/11807150.html 和 https://www.cnblogs.com/mind-water/p/11870604.html
|