Автор Тема: [РЕШЕНО] Меняются обозначения дисков sda/sdb/sdc в разных системах  (Прочитано 14968 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ludoed

  • Местный
  • *****
  • Автор темы
  • Сообщений: 861
  • ludoed1970@jabber.ru
Преамбула:
Нашел пару интересных дистров (archbang и chakra-linux) на базе ArchLinux с предустановленным графическим окружением, набором программ и т.п. Хотел попробовать, потом отписаться для сообщества о результатах.
Амбула:
Уперся в следующую проблему:
У меня трехдисковая машина, во всех Убунтах и в оригинальном Arch диски определяются одинаково:
250 Гб - sda
1 Тб - sdb
500 Гб - sdc

Диск /dev/sda: 250.1 ГБ, 250059350016 байт
255 heads, 63 sectors/track, 30401 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0008daa2

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1               1        1339    10755486    c  W95 FAT32 (LBA)
/dev/sda2            1340       30401   233440484+   5  Расширенный
/dev/sda5   *        1340        5227    31230328+  83  Linux
/dev/sda6            5228       14278    72702126    b  W95 FAT32
/dev/sda7           14279       14546     2152678+  82  Linux своп / Solaris
/dev/sda8           14547       16522    15872188+  83  Linux
/dev/sda9           16523       20474    31744408+  83  Linux
/dev/sda10          20475       22259    14337981   83  Linux
/dev/sda11          22260       24044    14337981   83  Linux
/dev/sda12          24045       26575    20330226   83  Linux
/dev/sda13          26576       30401    30732313+   b  W95 FAT32

Диск /dev/sdb: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004fd8e

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1               1      121601   976760001   83  Linux

Диск /dev/sdc: 500.1 ГБ, 500107862016 байт
255 heads, 63 sectors/track, 60801 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00087cf4

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdc1   *           1        1785    14337981   83  Linux
/dev/sdc2            1786       60801   474046020    5  Расширенный
/dev/sdc5            1786       20907   153597433+  83  Linux
/dev/sdc6           20908       60801   320448523+   b  W95 FAT32


Соответственно, на sda выделено несколько разделов под эксперименты
Однако пробуемые дистрибутивы почему-то определяют диски по-другому:
1Тб - sda
500 Гб - sdb
250 - sdc
То есть sda становится sdc, получается путаница.
При установке дистров на пробу я не устанавливаю загрузчик, а перегружаюсь в Убунту и обновляю grub2. Он честно находит вновь установленную систему (на sda10), а после перезагрузки вновь установленная система не грузится, т.к. при ее установке sda превратился в sdc, и она не находит свои файлы.
Такая ерунда происходит лишь при загрузке archbang и chakra-linux, оригинальный Arch видит разделы точно в том же порядке, что и Убунта
Внимание, вопрос:
Можно ли, загрузившись с Live-USB, и увидев, что разделы определились криво, как-то их переназначить, чтобы 250 Гб, опознанный как sdc, вновь стал sda?
Устанавливать загрузчик новой системы при изменившихся разделах - не вариант, в основную систему не попаду.
Теоретически, можно отключить терабайтник и 500-ку, оставив на время установки лишь один винт, но, может, есть более простое и изящное решение, это же Linux, все-таки?
Кто подскажет?
« Последнее редактирование: Август 11, 2011, 19:25:50 от ludoed »
все юниксы очень дружелюбны.. они просто очень разборчивы в друзьях ;)

Настоящее труЪ: самописное ядро, выращенные на кухне кристаллы и программирование перемычками :)

Оффлайн maksipes

  • Global Moderator
  • *****
  • Сообщений: 116
после перезагрузки вновь установленная система не грузится, т.к. при ее установке sda превратился в sdc, и она не находит свои файлы.
uuid

Оффлайн vmf

  • Местный
  • *****
  • Сообщений: 587
  • vmf000@yabber.ru
Где-то читал, что порядок дисков меняется в зависимости от версии ядра (вроде до и после 2.6.32)
Другого решения, кроме как использование UUID, не встречалось.

Оффлайн kompilainenn

  • Местный
  • *****
  • Сообщений: 1043
  • Активно пропагандирую Runtu
а разве груб2 из убунты не использует именно uuid?
Мы говорим Linux, подразумеваем Runtu

Оффлайн vmf

  • Местный
  • *****
  • Сообщений: 587
  • vmf000@yabber.ru
а разве груб2 из убунты не использует именно uuid?
На использование uuid влияет опция в /etc/default/grub
GRUB_DISABLE_LINUX_UUID
Кроме того, прописывать руками можно и так и так.
Для нормальной загрузки не достаточно указать uuid в меню grub, нужно еще в запускаемой системе в fstab правильно указать ФС (тоже через uuid).

Оффлайн kompilainenn

  • Местный
  • *****
  • Сообщений: 1043
  • Активно пропагандирую Runtu
блин, я имел ввиду, что абанта по дефолту использует именно uuid
Мы говорим Linux, подразумеваем Runtu

Оффлайн ludoed

  • Местный
  • *****
  • Автор темы
  • Сообщений: 861
  • ludoed1970@jabber.ru
Вряд ли удастся использовать uuid, загружаясь с live-usb перед установкой.  ???
Ок, спасибо, поковыряюсь, если что придумаю - отпишусь
все юниксы очень дружелюбны.. они просто очень разборчивы в друзьях ;)

Настоящее труЪ: самописное ядро, выращенные на кухне кристаллы и программирование перемычками :)

Оффлайн ludoed

  • Местный
  • *****
  • Автор темы
  • Сообщений: 861
  • ludoed1970@jabber.ru
Разобрался
Работает.
В общем, так:
1. Опция GRUB_DISABLE_LINUX_UUID отменяет использование UUID в grub. Ибо он там используется по умолчанию
2. в fstab испытуемой системы разделы прописаны по UUID изначально при установке
но:
3. При ее загрузке ядро начинало грузиться и потом ругалось, что не может найти раздел.

Для начала нашел неплохой HOWTO по настройке grub2
http://forum.ubuntu.ru/index.php?topic=74165.0

Прямого ответа на вопрос там не нашлось, но было сказано про файлы grub.cfg и 40_custom, что и помогло.
Сначала я изучил grub.cfg и сравнил 2 записи:
Убунту:
Цитировать
menuentry 'Ubuntu, с Linux 2.6.38-11-generic-pae' --class ubuntu --class gnu-linux --class gnu --class os {
   recordfail
   set gfxpayload=$linux_gfx_mode
   insmod part_msdos
   insmod ext2
   set root='(/dev/sda,msdos8)'
   search --no-floppy --fs-uuid --set=root 8f535c07-d853-4a08-b09b-6713756a4331
   linux   /boot/vmlinuz-2.6.38-11-generic-pae root=UUID=8f535c07-d853-4a08-b09b-6713756a4331 ro   
   initrd   /boot/initrd.img-2.6.38-11-generic-pae
Chakra Linux:
Цитировать
menuentry "Chakra Linux (2011.04_20110521-1) (on /dev/sda10)" --class gnu-linux --class gnu --class os {
   insmod part_msdos
   insmod ext2
   set root='(/dev/sda,msdos10)'
   search --no-floppy --fs-uuid --set=root 2d4c1590-41e2-4a32-af84-18e99a5e3d9b
   linux /boot/vmlinuz26 root=/dev/sda10
   initrd /boot/kernel26.img

UUID для раздела Chakra Linux выяснил легко:
ls -l /dev/disk/by-uuidДалее нашел файл 40_custom и прописал в него свой вариант:
Цитировать
menuentry "Chakra Linux (2011.04_20110521-1) (on /dev/sda10)" --class gnu-linux --class gnu --class os {
   insmod part_msdos
   insmod ext2
   set root='(/dev/sda,msdos10)'
   search --no-floppy --fs-uuid --set=root 2d4c1590-41e2-4a32-af84-18e99a5e3d9b
   linux /boot/vmlinuz26 root=UUID=2d4c1590-41e2-4a32-af84-18e99a5e3d9b
   initrd /boot/kernel26.img
Попробовал загрузиться. Ядро оттопырило чакры и сказало что-то вроде "да не понимаю я, что такое UUID=2d4c1590-41e2-4a32-af84-18e99a5e3d9b, отвяжись ты от меня!"
Я сказал: "Ой!"

Затем, сообразив, что ядро выкинуло меня в консоль, дал ту же команду
ls -l /dev/disk/by-uuidи увидел, что теперь ядро считает свой корневой раздел sdc10

Слегка поразмыслив, изменил в файле 40_custom всего одну букву:
Цитировать
menuentry "Chakra Linux (2011.04_20110521-1) (on /dev/sda10)" --class gnu-linux --class gnu --class os {
   insmod part_msdos
   insmod ext2
   set root='(/dev/sda,msdos10)'
   search --no-floppy --fs-uuid --set=root 2d4c1590-41e2-4a32-af84-18e99a5e3d9b
   linux /boot/vmlinuz26 root=/dev/sdс10
   initrd /boot/kernel26.img

И оно заработало!!!

В общем, как я и думал, нашлось простое и изящное решение.
все юниксы очень дружелюбны.. они просто очень разборчивы в друзьях ;)

Настоящее труЪ: самописное ядро, выращенные на кухне кристаллы и программирование перемычками :)

Оффлайн kompilainenn

  • Местный
  • *****
  • Сообщений: 1043
  • Активно пропагандирую Runtu
а без указания параметра root= в строке ядра оно будет работать?
а то в этом вашем 40_custom каша

1. set root='(/dev/sda,msdos10)'
2. --set=root 2d4c1590-41e2-4a32-af84-18e99a5e3d9b
3. root=/dev/sdс10

три строки с одним параметром и разными значениями=) как оно вообще работает-то?
Мы говорим Linux, подразумеваем Runtu

Оффлайн totewekotiara

  • Новичок
  • **
  • Сообщений: 41
все верно - UUID - лучшее решение. :)

Оффлайн ludoed

  • Местный
  • *****
  • Автор темы
  • Сообщений: 861
  • ludoed1970@jabber.ru
а без указания параметра root= в строке ядра оно будет работать?
а то в этом вашем 40_custom каша

1. set root='(/dev/sda,msdos10)'
2. --set=root 2d4c1590-41e2-4a32-af84-18e99a5e3d9b
3. root=/dev/sdс10

три строки с одним параметром и разными значениями=) как оно вообще работает-то?

Как оно вообще работает - эт вы не у меня, эт вы у Торвальдса спрашивайте :)

Относительно 3-х "разных" параметров у меня есть лишь догадка:
В мануале, на который я ссылался, есть упоминание:
Цитировать
и еще один очень важный момент: в начале файла должна иметься такая строка:
insmod part_msdos
загрузка данного модуля обязательна! без него полученный grub2 увидит только жесткий диск, но не увидит таблицу разделов на нем

в каждом menuentry в grub.cfg эта строка есть, и я сильно подозреваю, что параметр
set root='(/dev/sda,msdos10)'скармливается именно этому модулю grub, т.к. идет почти сразу за ним

Далее, параметр
--set=root 2d4c1590-41e2-4a32-af84-18e99a5e3d9b
скармливается уже самому grub, указывая, на каком разделе искать ядро.
При этом у меня параметры 1 и 2 указывают на один и тот же раздел диска, но по-разному
3-й параметр
root=/dev/sdс10скармливается уже самому ядру, и если ядро понимает разделы моих дисков в извращённой форме, (не так, как понимает их grub), таки я готов писать ему в стихах на олбанском, лишь бы оно загрузилось.

Относительно
Цитировать
UUID - лучшее решение
я согласен, но с оговоркой: лучшее для Убунты.
А эта самая Chakra - не Убунта, она основана на Арче, но использует собственные репозитории, и как там собрано ее ядро и ее initrd, что оно не понимает UUID, пока полностью не загрузится, откуда ж я знаю?

Так или иначе, но система загрузилась, что мне и требовалось.
все юниксы очень дружелюбны.. они просто очень разборчивы в друзьях ;)

Настоящее труЪ: самописное ядро, выращенные на кухне кристаллы и программирование перемычками :)