`dd if=/dev/sda of=/dev/sdb`后如何以第二块硬盘启动?

我想备份我的硬盘, 使用的是dd if=/dev/sda of=/dev/sdb.

成功之后我以第二块硬盘启动(已多次确定), 但是最后还是挂载在第一块硬盘(内部的)上. 并且拔了第二块硬盘系统还是正常运行…

请问:

  1. 我如何才能挂载在第二块硬盘(外部的)上?
  2. 如果系统挂载在第一块硬盘上, 这时把第一块硬盘拔掉, 会发生什么事?
  3. 我这样复制的系统是否只适用于本机(或与本机相同配置的机器), 因为Linux的固件驱动不能相容?

附信息(我装了3个系统…):

sudo fdisk -l:

Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
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: dos
Disk identifier: 0x0004cba2

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1  *         4096 103084887 103080792  49.2G  7 HPFS/NTFS/exFAT
/dev/sda2       103086080 104855551   1769472   864M 27 Hidden NTFS WinRE
/dev/sda3       104861694 976771071 871909378 415.8G  f W95 Ext'd (LBA)
/dev/sda5       104861696 396363775 291502080   139G  7 HPFS/NTFS/exFAT
/dev/sda6       396365824 591738879 195373056  93.2G 83 Linux
/dev/sda7       591749120 678856703  87107584  41.5G 83 Linux
/dev/sda8       678858752 680032255   1173504   573M 83 Linux
/dev/sda9       680042496 687855615   7813120   3.7G 82 Linux swap / Solaris
/dev/sda10      687867904 699584511  11716608   5.6G 82 Linux swap / Solaris
/dev/sda11      699586560 700364799    778240   380M 83 Linux
/dev/sda12      700366848 798021144  97654297  46.6G 83 Linux
/dev/sda13      798023680 976771071 178747392  85.2G 83 Linux

Partition 3 does not start on physical sector boundary.




Disk /dev/sdb: 1.4 TiB, 1500267937792 bytes, 2930210816 sectors
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: dos
Disk identifier: 0x0004cba2

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sdb1  *         4096 103084887 103080792  49.2G  7 HPFS/NTFS/exFAT
/dev/sdb2       103086080 104855551   1769472   864M 27 Hidden NTFS WinRE
/dev/sdb3       104861694 976771071 871909378 415.8G  f W95 Ext'd (LBA)
/dev/sdb5       104861696 396363775 291502080   139G  7 HPFS/NTFS/exFAT
/dev/sdb6       396365824 591738879 195373056  93.2G 83 Linux
/dev/sdb7       591749120 678856703  87107584  41.5G 83 Linux
/dev/sdb8       678858752 680032255   1173504   573M 83 Linux
/dev/sdb9       680042496 687855615   7813120   3.7G 82 Linux swap / Solaris
/dev/sdb10      687867904 699584511  11716608   5.6G 82 Linux swap / Solaris
/dev/sdb11      699586560 700364799    778240   380M 83 Linux
/dev/sdb12      700366848 798021144  97654297  46.6G 83 Linux
/dev/sdb13      798023680 976771071 178747392  85.2G 83 Linux

sudo df:

Filesystem     1K-blocks     Used Available Use% Mounted on
udev             3870020        0   3870020   0% /dev
tmpfs             776252     9764    766488   2% /run
/dev/sda7       42607996  9713060  30700864  25% /
tmpfs            3881260   110052   3771208   3% /dev/shm
tmpfs               5120        4      5116   1% /run/lock
tmpfs            3881260        0   3881260   0% /sys/fs/cgroup
/dev/sda13      87840040 44380972  38974000  54% /home
tmpfs             776252       20    776232   1% /run/user/120
tmpfs             776252       60    776192   1% /run/user/1001
/dev/sdb12      47928980 12048496  33422744  27% /media/ycs/374e574d-55f1-469e-9045-408b11e6fa71
/dev/sdb5      145751036 59822632  85928404  42% /media/ycs/User
/dev/sdb8         561124    53148    466908  11% /boot
/dev/sdb11        368615   115445    229618  34% /media/ycs/5c465bb8-932b-43a7-84d5-dbf0475d11da
/dev/sdb6       95627684   251476  90475500   1% /media/ycs/5e987442-1509-45a1-8a8f-caeba44bd371
/dev/sdb1       51540392 45120288   6420104  88% /media/ycs/System
  1. 我如何才能挂载在第二块硬盘(外部的)上?

(我就当作这是一个移动硬盘了)先插好,然后按电源键,在BIOS中能看到就说明能用了。

2 .如果系统挂载在第一块硬盘上, 这时把第一块硬盘拔掉, 会发生什么事?

不是很懂你的这句话,反正如果dd if=/dev/sda of=/dev/sdb操作了,那么两个硬盘都一样的,拔了第一个没事

  1. 我这样复制的系统是否只适用于本机(或与本机相同配置的机器), 因为Linux的固件驱动不能相容?

这个可能会。

##以上23是我个人认为的,没实际操作过

至于第二块硬盘启动?
我想到的办法就是从BIOS(中将第二块硬盘的启动级别提高(不知道我说的你懂不懂,也许我描述的不对)
还有就是执行

sudo update-grub2

我确认我已经从第二块硬盘启动了, BIOS级别的:

  1. 我设优外部硬盘优先于本地硬盘.(thinkpad F1键)
  2. 我分别手动选择了2个硬盘作为启动盘.(thinkpad F12键)

但是开机后挂载的还是内部的硬盘

这样的话两块硬盘各分区的 UUID 就成一样的了,当您在 fstab 里指定
UUID=17h658ddb-1e17-876d-b3c6-d81d576544d4
时,会不会出问题呢?据说这样是无法挂载的

楼主的问题是这个原因引起的吧?:他在bois里设置为sdb启动,当sdb上的内核读进内存,去读sdb上的/etc/fstab,但这个fdtab是重sda克隆过来的,里面的挂载项都是sda上的分区的uuid,于是读取完fstab后,系统还是根据fstab上的uuid,重载了sda上的分区。

1 个赞

第三个问题, 我今天在别的机器上以第二块硬盘启动了, 完美没啥问题, 看来驱动有一定兼容性.
第二个问题, 当系统运行时, 拔掉硬盘, 会导致军部分系统坏掉, 但不是完全换掉, 大概有些信息是放在内存中的, 还可以用吧. 但关机只能按电源键了.

第一个问题, 我至今不知道怎么解决. 即使现式指定第二块硬盘启动, 也只有在revovery模式可以引导到第二块硬盘, 正常启动会到第一块硬盘. 所以问题是怎么让开机查找硬盘时第二块的优先级高于第一块.

个人认为这个可能是标准答案。

目前我只能想到两种方法,要么逐个更改sdb里每个分区的uuid,并相应修改/etc/fstab
要么就是定制intiramfs脚本,挂载root和home以及其它分区都用/dev/disk/by-id/里的文件去处理,而不是用普通的uuid.
对我来说感觉后者更简单,也非常有趣,真的不复杂,只需要沉下心看看文档即可.
学会定制initramfs后一个有趣也有用的用途就是可以把多个Debian系系统都装进同一个ext4分区里(其他类型的分区也行,不过脚本定制起来就更麻烦)