LINUX.ORG.RU

Перенос системы Debian с PATA на SATA


0

0

Собссно, сабж. В домашний сервер установил вместо маленького устройства hda большое sda. Систему решил перенести. Пока опыта мало, поэтому решил особо не изгаляться и тупо скопировал командой
dd if=/dev/hda of=/dev/sdb
Сработало. С нового диска Grub запускается, но дальше затык. Затык такой:
Waiting for root file system...
Ессно, первым делом поправил menu.lst и fstab. Заменил там все hda на sda. Всё равно не грузится. Проверил, убедился, что диск именно тот, который нужен. Погуглил, нашёл, что хорошо бы сделать update-initramfs. Вот тут начинается провал в знаниях. Что такое образ ядра, создаваемый при загрузке в оперативе, я понимаю. А вот как это точно работает и нужно ли его в самом деле обновлять при изменении типа контроллера, не знаю.
Запустился с дебиановского установочного CD, вошёл там в консоль, попытался запустить вышеуказанную команду. И наткнулся вот на что:
# update-initramfs -u -k all
update-initramfs: generating /boot/inird.img-2.6.26-2-686
mkinitramfs: missing hda root /dev/hda1 /sys entry

Остальные строчки можно не писать, я думаю - они не несут смыловой нагрузки. Итак, скрипт mkinitramfs за каким-то фигом пытается в /sys найти старое устройство hda, которого там нет, ессно. Следовательно, где-то в настройках этого скрипта отложилось, что надо искать такое устройство. Файлы, содержащиеся в /etc/initramfs-tools, я, согласно ману, попробовал покопать. Не нашёл там такой настройки.
Подскажите пожалуйста, где искать причину того, что mkinitramfs пытается создать образ для несущствующего устройства, и действительно ли в этом проблема, связанная с невозможностью найти root при загрузке?

> Ессно, первым делом поправил menu.lst
Где именно? В параметрах ядра или в комментариях, которые читаются скриптом update-grub?

fstab

и что же написали? Попробуйте воспользоваться UUID или LABEL.

dd if=/dev/hda of=/dev/sdb

А вот так делать не стоит. Теперь sdb будет считаться таким же маленьким, как и hda.
Решение:
1) dd if=/dev/zero of=/dev/sdb bs=512 count=1
2) разбиваем на разделы: fdisk. cfdisk, *parted...
3) форматируем разделы при необходимости (mkfs.чтототам /dev/hdbX)
4) mkdir /media/hdaX /media/hdbY; mount /dev/hdaX /media/hdaX; mount /dev/sdbY /media/sdbY
5) rsync -vph --progress /media/hdaX/* /media/sdbY/
6) редактируем /media/sdbY/etc/fstab для новых значений
7) правим комментарии /media/sdbY/boot/grub/menu.lst для правильных параметров root=...
8) grub-install --root-directory=/media/sdbY/ /dev/sdb
9) chroot /media/sdb /usr/sbin/update-grub

AITap ★★★★★
()
Ответ на: комментарий от AITap

> Ессно, первым делом поправил menu.lst

Где именно? В параметрах ядра или в комментариях, которые читаются скриптом update-grub?

1) Строчку kopt
2) Непосредственно строку, отвечающую за запуск:
kernel/........ root=/dev/sda1

А обязательно LABEL пользоваться? Если уверен в том, что правильный раздел прописываешь? Впрочем, могу и попробовать. И, пожалуй, сделаю всё ещё раз по предложенной Вами инструкции.

Drevoborod
() автор топика
Ответ на: комментарий от Drevoborod

Апдейт: нет, перенести уже не получится. Потому что старый винчестер не грузится совсем (возможно, повредил, пока вытаскивал - даже ГРаб не запускается, пишет ReadError).

Drevoborod
() автор топика
Ответ на: комментарий от Drevoborod

Не помогло

Итак, добавив LABEL, я получил тот же результат - не работает. Собссно, этого я и ожидал.
Но появились новые наблюдения. А именно: загрузившись в очередной раз в Repair mode (или как он зовётся на дебиановском установочном CD), я попробовал ввести команду df и с удивлением наблюдал старую таблицу разделов в таком виде, в каком она была загружена при работе со старым диском! То есть при переносе информации с системного диска побайтно я захватил и все временные файлы, в которых отражаются записи о смонтированных файловых системах. Теперь вопрос: как почистить эти временные файлы? Очистка /tmp не помогла, значит, они ещё где-то хранятся. МОжет быть, в этом вся проблема? Ведь на мой второй вопрос - откуда mkinitramfs взяла несуществующее устройство - мне пока не ответили. МОжет, всё-таки стоит сюда копать?

Повторюсь: сделать перенос системы ещё раз, только правильно, я не могу по причине того, что старый ЖД теперь повреждён :(

Drevoborod
() автор топика
Ответ на: комментарий от AITap

> Что говорит mount?

Что он пишет при загрузке? Теперь ситуация изменилась. Теперь нет ошибки «Waiting for root filesystem» - её мы наконец нашли. Теперь уже ругается mount:

Mounting /dev/disk/by-label/rootfilesys on /root failed: No such device

Внимание, вопрос: как это всё работает, етить его?? rootfilesys - это метка раздела, на котором находится система. Теперь я сделал монтирование по метке, но оно всё равно не работает.

Дальше следует ещё пара ошибок mount, проистекающих из этой - оно пытается подмонтировать /proc, dev, sys на /root, но не может ессно, так как сам /root не создался.

Drevoborod
() автор топика
Ответ на: комментарий от AITap

> Если загрузиться с livecd и сделать mount LABEL=rootfilesys /mnt, что произойдёт?

Если сделать это в Дебиановской консоли восстановления (при загрузке в Rescue mode с дебиановского установочного диска), то пишет, что уже примонтировано как /.
Если с убунтушного livecd запуститься, то ничего не говорит. Просто монтирует :)

Drevoborod
() автор топика
Ответ на: комментарий от Drevoborod

Это не самое интересное! Вот самое интересное: в консоли initramfs. куда меня выкидывает после сбоя в загрузке, пишем ls /dev/disk/by-label и таки видим там этот самый rootfilesys!

Drevoborod
() автор топика
Ответ на: комментарий от AITap

..А когда в той же консоли ввёл
mount /dev/disk/by-label/rootfilesys /
получил ответ:
...error: No such file...

В rescue mode введите: mount


/dev/sda1 on / type ext3

Drevoborod
() автор топика
Ответ на: комментарий от Drevoborod

ls -l /dev/disk/by-label/rootfilesys

ls /proc
ls /dev
ls /sys

Если перейти на другой VT и ввести там mount, будет ли указан какой-либо bind?

AITap ★★★★★
()
Ответ на: комментарий от cuki

Всё пробовал :) ПОмогло следующее:

http://forums.debian.net/viewtopic.php?f=5&t=52283

Делал вот так:
Взял LiveCD Убунты и сделал там:
mount /dev/sdb1 /media/disk
mount -o bind /sys /media/disk/sys
mount -t proc /proc /media/disk/proc
mount -o bind /dev /media/disk/dev
chroot /media/disk
update-initramfs -u -k all
update-grub

КстатИ, в совете по той ссылке было update-initramfs -c -k <kernel>
update-grub (я -c заменил на -u).

Спасибо всем откликнувшимся! Благодаря вашим советам я чуть лучше стал понимать, что делаю :))

Drevoborod
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.