Я установил Ubuntu на свой внешний жесткий диск, но он не загружается на моем ноутбуке. Что я делаю?

Я немного почитал и проследил источник проблемы до Grub2. Очевидно, Grub2 не использует UUID устройства, а вместо этого использует каталог linux (/dev/sdf2). Это означает, что всякий раз, когда я подключаю свой E-HDD к системе, к которой подключено другое количество дисков, я не смогу загрузиться без редактирования команды загрузки. Я не очень хорошо понимаю, но это то, что я понял из того, что я прочитал.

Есть ли способ это исправить?

Вот мой конфиг grub (обрезан, чтобы показать пример записи ядра). Я понятия не имею, почему он не использует UUID. Я не настраивал это однажды ...

### BEGIN /etc/grub.d/10_linux ###
menuentry "Ubuntu, Linux 2.6.31-20-generic" {
        recordfail=1
        if [ -n ${have_grubenv} ]; then save_env recordfail; fi
    set quiet=1
    linux   /boot/vmlinuz-2.6.31-20-generic root=/dev/sdc2 ro   quiet splash
    initrd  /boot/initrd.img-2.6.31-20-generic
}
menuentry "Ubuntu, Linux 2.6.31-20-generic (recovery mode)" {
        recordfail=1
        if [ -n ${have_grubenv} ]; then save_env recordfail; fi
    linux   /boot/vmlinuz-2.6.31-20-generic root=/dev/sdc2 ro single 
    initrd  /boot/initrd.img-2.6.31-20-generic
}

2 ответа2

1

Проблема состояла в том, что мой device.map не был настроен должным образом, что привело к grub с использованием имен ubuntu, например, sdf2, а не UUIDs жесткого диска. исправление состояло в том, чтобы обновить device.map, а затем обновить grub2. Я думаю, что это делается путем запуска 'drivemap', а затем update-grub. Я не слишком уверен в команде для обновления device.map, потому что я сделал это около недели назад, но да. Это на всякий случай, если кто-нибудь столкнется с моей проблемой.

0

Хорошо, вы правы, что это не захват UUID, что кажется мне странным.

Вот как должна выглядеть запись ядра (это от моей виртуальной машины Ubuntu 9.10, немного подправлено, но это должно быть довольно просто):

menuentry "Ubuntu, Linux 2.6.31-20-generic" {
    recordfail=1
    if [ -n ${have_grubenv} ]; then save_env recordfail; fi
    set quiet=1
    insmod ext2
    set root=(hd0,1)
    search --no-floppy --fs-uuid --set b22c7fe9-4354-40bf-b9bf-87a469289f6e
    linux /boot/vmlinuz-2.6.31-20-generic root=UUID=b22c7fe9-4354-40bf-b9bf-87a469289f6e ro
    initrd        /boot/initrd.img-2.6.31-20-generic
}

Файл /boot/grub/grub.cfg генерируется, когда что-то запускает update-grub из сценариев в /etc/grub.d и переменных в файле /etc/default/grub.


  • Теперь в файле по умолчанию есть переменная GRUB_DISABLE_LINUX_UUID, которая при значении true даст значение root =/dev/sdXY для строки ядра linux (вместо значения root = UUID = ... ). Я не думаю, что это ваша проблема, но проверьте ваш файл /etc/default/grub, чтобы убедиться. Вы должны увидеть эти строки (знак # в начале строки означает, что он закомментирован):

    # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
    #GRUB_DISABLE_LINUX_UUID=true
    

    Если вы видите GRUB_DISABLE_LINUX_UUID без # в начале, вставьте его, сохраните файл и запустите sudo update-grub чтобы восстановить grub.cfg. Затем проверьте grub.cfg еще раз, чтобы увидеть, выглядит ли он правильно.


  • Если файл настроек по умолчанию выглядит нормально, затем проверьте сами UUID вашего накопителя. Возможно, UUID накопителя установлены неправильно или не распознаются правильно. У uDev есть задача создания символических ссылок в дереве устройств для дисковых UUID; Проверь их:

    $ ls -l /dev/disk/by-uuid
    total 0
    lrwxrwxrwx 1 root root 10 2010-04-18 04:15 b22c7fe9-4354-40bf-b9bf-87a469289f6e -> ../../sda1
    lrwxrwxrwx 1 root root 10 2010-04-18 04:15 e1c64ac1-186d-4c15-8833-6072ac6421df -> ../../sda5
    

    Если это не показывает раздел, который вы ожидаете увидеть, вам может потребоваться проверить файловую систему напрямую с помощью tune2fs (manpage) (замените /dev /sda1 на правильное имя устройства):

    $ sudo tune2fs -l /dev/sda1 | grep UUID
    Filesystem UUID:          b22c7fe9-4354-40bf-b9bf-87a469289f6e
    

    Если это отсутствует, вы можете восстановить его с помощью:

    $ sudo tune2fs -U random /dev/sda1
    

    Теперь еще раз проверьте вывод tune2fs -l , а затем снова проверьте /dev /disks /by-uuid . Вам может потребоваться перезагрузка, прежде чем uDev примет изменения. Скрипты update-grub теперь должны выбрать UUID, поэтому перезапустите его и проверьте новый grub.cfg, чтобы увидеть, выглядит ли он правильно.


  • Если ничего из этого не получается, возможно, вам придется копать немного глубже. Давайте проверим наши предположения:
    • Как разделить загрузочный диск? (fdisk -l)
    • Как отформатирован ваш загрузочный диск? (Ext2/3/4? FAT32? NTFS?)
    • Вы устанавливали через Wubi?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .