/boot/grub/grub.cfg
のuuid
を変更して、grubが指定されたパーティションにOSをロードできるようにする方法を尋ねています。
2つのディスクがあります。
sda1
のコンテンツはsdb1
からclonezilla
によって複製されるため、両方のディスクには同じコンテンツ(Ubuntuルート)が含まれますが、パーティションuuidは異なります。
問題は/boot/grub/grub.cfg
で、自動的に生成され、次のものが含まれます。
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 47d9205b-00a8-40e5-88d6-e8b9571799a7
else
search --no-floppy --fs-uuid --set=root 47d9205b-00a8-40e5-88d6-e8b9571799a7
fi
echo 'Loading Linux 4.4.0-146-generic ...'
linux /boot/vmlinuz-4.4.0-146-generic root=UUID=47d9205b-00a8-40e5-88d6-e8b9571799a7 ro quiet splash $vt_handoff
grubがsdb1
ではなくsda1
からUbuntuルートを選択することを示していますが、sda1
を選択したいのです。
すべての47d9205b-00a8-40e5-88d6-e8b9571799a7
をd7f0cf11-3edf-4859-b65a-3b5bc60ea7b9
に直接置き換えてからupdate-grub
を実行しようとしましたが、すべて元に戻りました。
他にもっと良い解決策はありますか? /boot/grub/grub.cfg
は実際には自動的に生成されます。 sdb1
をデタッチした場合、sdb1
のuuidが見つからなかったため、grubを起動できませんでした。
ありがとう
アップデート:
shijiex@shijie:~$ 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>
proc /proc proc nodev,noexec,nosuid 0 0
# / was on /dev/sda1 during installation
UUID=d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9 / ext4 errors=remount-ro 0 1
#UUID=47d9205b-00a8-40e5-88d6-e8b9571799a7 /old_os ext4 errors=remount-ro 0 2
# /backup was on /dev/sda5 during installation
UUID=d36e69de-3af8-4302-a2b1-f32c2538493d /backup ext4 defaults 0 0
# /home was on /dev/sda7 during installation
UUID=95ffe5be-ed1c-4d2b-b745-e31ba62ca63d /home ext4 defaults 0 2
#UUID=e2ae897d-62b1-45d3-a17a-49e7a1b8fbe7 /home ext4 defaults 0 2
# /vm was on /dev/sda8 during installation
#UUID=222bf555-b2d3-4607-a856-f5fd785b1862 /vm ext4 defaults 0 2
# /opt was on /dev/sda8 during installation
UUID=ffbc1ea0-f426-4def-9349-a6f68b486b2f /opt ext4 defaults 0 0
# /other was on /dev/sda6 during installation
UUID=657778bc-fde8-4261-9fe6-4134c6a7fb3f /other ext4 defaults 0 0
# /other was on /dev/sda6 during installation
#UUID=6db98036-2350-4289-b9ef-8e0a2ae52eeb /win ext4 defaults 0 2
# swap was on /dev/sda9 during installation
UUID=71c498b2-3484-4d5b-b64a-270cc352841b none swap sw 0 0
#UUID=05f1ba29-4188-40d1-8597-de708b48ed50 /tmp swap sw 0 0
およびblkid
:
shijiex@shijie:~$ Sudo blkid
[Sudo] password for shijiex:
/dev/sda1: UUID="d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9" TYPE="ext4" PARTUUID="2fe05ff9-01"
/dev/sda3: UUID="95ffe5be-ed1c-4d2b-b745-e31ba62ca63d" TYPE="ext4" PARTUUID="2fe05ff9-03"
/dev/sda4: UUID="8d114eed-5ce4-4d6f-8a28-8a7092b01d46" TYPE="ext4" PARTUUID="2fe05ff9-04"
/dev/sda5: UUID="94b0fb65-f56d-426d-81f9-d05a8ac783eb" TYPE="ext4" PARTUUID="2fe05ff9-05"
/dev/sdb1: UUID="47d9205b-00a8-40e5-88d6-e8b9571799a7" TYPE="ext4" PARTUUID="0001c588-01"
/dev/sdb10: LABEL="New Volume" UUID="6db98036-2350-4289-b9ef-8e0a2ae52eeb" TYPE="ext4" PARTUUID="0001c588-0a"
/dev/sdb11: UUID="ffbc1ea0-f426-4def-9349-a6f68b486b2f" TYPE="ext4" PARTUUID="0001c588-0b"
/dev/sdb5: UUID="d36e69de-3af8-4302-a2b1-f32c2538493d" TYPE="ext4" PARTUUID="0001c588-05"
/dev/sdb6: UUID="657778bc-fde8-4261-9fe6-4134c6a7fb3f" TYPE="ext4" PARTUUID="0001c588-06"
/dev/sdb7: UUID="e2ae897d-62b1-45d3-a17a-49e7a1b8fbe7" TYPE="ext4" PARTUUID="0001c588-07"
/dev/sdb8: UUID="222bf555-b2d3-4607-a856-f5fd785b1862" TYPE="ext4" PARTUUID="0001c588-08"
/dev/sdb9: UUID="71c498b2-3484-4d5b-b64a-270cc352841b" TYPE="swap" PARTUUID="0001c588-09"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"
HDDをSDDにクローン作成したことを示しました。ただし、Sudo blkid
とcat /etc/fstab
を見ると、あまり相関していません。パーティションが一致しません。 UUIDが一致しません。クローンとブートだけではなく、もっと多くの変更を加えたと思います。
あなたが何をしたか、どのようにしたかを正確に知らなければ、あなたのために簡潔な答えを思いつくことは困難です...しかし、あなたはこれを試すことができます...
UUID=xxxx
を見つけますUUID=xxxx
部分全体を/dev/sda1
に変更しますSudo update-grub
、次にreboot
私はClonezillaができることを制限なしで実行するbashスクリプトを書きました。
Clonezillaがあなたのためにしないことのスクリプトからのハイライト:
echo ""
echo "====================================================================="
echo "Making changes in: $TargetMnt/etc/fstab"
echo " from UUID: $SourceUUID"
echo " to UUID: $TargetUUID"
sed -i "s/$SourceUUID/$TargetUUID/g" "$TargetMnt"/etc/fstab
# Update /boot/grub/grub.cfg on clone partition with clone's UUID
echo ""
echo "====================================================================="
echo "Making changes in: $TargetMnt/boot/grub/grub.cfg"
echo " from UUID: $SourceUUID"
echo " to UUID: $TargetUUID"
echo "Also change 'quiet splash' to 'nosplash' for environmental awareness"
echo "Suggest first time booting clone you make wallpaper unique"
sed -i "s/$SourceUUID/$TargetUUID/g" "$TargetMnt"/boot/grub/grub.cfg
#sed -i "s/quiet splash/nosplash/g" "$TargetMnt"/boot/grub/grub.cfg
sed
の前に#
を挿入して、grubの「静かなスプラッシュ」への変更をコメントアウトすることを目的に注意してください。私は明らかにこれをテストしていませんが、スクリプトをハックして、HDDから起動した後に独自のバージョンを作成することができます。これらのコマンドをハッキングされたスクリプトに配置します。
#!/bin/bash
SourceUUID="47d9205b-00a8-40e5-88d6-e8b9571799a7"
TargetUUID="d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9"
TargetDev=/dev/sdaX # Replace `X`this with your actual number
TargetMnt="/mnt/clone"
mkdir -p "$TargetMnt" # '-p' directory may already exist
mount -t auto -v $TargetDev "$TargetMnt" > /dev/null
sed -i "s/$SourceUUID/$TargetUUID/g" "$TargetMnt"/etc/fstab
sed -i "s/$SourceUUID/$TargetUUID/g" "$TargetMnt"/boot/grub/grub.cfg
umount "$TargetMnt" -l # Unmount the clone
rm -d "$TargetMnt" # Remove clone directory
実行可能ファイルchmod a+x /path/to/MyHackedScript
としてマークし、ルート権限Sudo /pathto/MyHackedScript
で呼び出します。
Sudo update-grub
を実行できますrsync
は、(再)クローニングプロセスに使用されます。