Решил поведать о засаде и решении, может кому пригодится.
Вводная часть
Ноут, Asus L5800C, winXP, kubuntu 7.10. Почти 2 года назад полетел винт, пришлось брать что было в магазине: IDE 160Гб, BIOS его не понимал, только до 80Гб. В результате загрузчики типа Grub, LILO не могут загрузить ОС больше чем с 1024 цилиндра (error 18).
Выкрутился. Выделил партицию под /boot 100Мб в начале, за ней Windows (ей требуется основная, первая, активная), а всё остальное в расширенном разделе: корень \ ext3 и раздел данных fat32 (надо). Двигал "шашки", кажется, Акронисом, что имелся под рукой. В результате загрузилась и Windows (лицензия, наследие прошлой работы) и линукс (нынешняя работа). Два года почти проработал, потом глянул на fdisk -l и волосы дыбом встали. GParted разбивки винта в упор не видел, QTParted крашился.
Старая таблица партиций
wolf@alex02:~$ sudo su
[sudo] password for wolf:
root@alex02:/home/wolf# fdisk -l
Диск /dev/sda: 160.0 ГБ, 160041885696 байт
255 heads, 63 sectors/track, 19457 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x15a215a1
Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 * 14 1972 15735667+ c W95 FAT32 (LBA)
/dev/sda2 1973 19457 140448262+ f W95 расшир. (LBA)
/dev/sda3 1 13 104391 83 Linux
/dev/sda4 1973 5766 30475273+ 83 Linux
/dev/sda5 5889 19457 108992961 b W95 FAT32
/dev/sda6 5767 5888 979933+ 82 Linux своп / Solaris
Пункты таблицы разделов расположены не в дисковом порядке
Каким-то каком основная партиция под номером 4 (sda4) оказалась внутри расширенной (sda2)! Глюк редкий, но злой. Непорядок. Напомню: основные это 1,2,3,4 расширенные 5 и дальше...
Решение
Есть 2-й ПК, сеть, самба и мамба, винт достаточной ёмкости, время. Взял Clonezilla (удобный аналог NortonGhost, Acronis TrueImage и т.п.) LiveCD PuppyRus-1.30-jeans (рекомендую).
1. Clonezilla снял образы всех рабочих партиций sda1-sda3-sda4, включая MBR, кроме sda6 (swap) и sda5 данных. Своп сохранять не нужно, а данные большие, проще слить напрямую через сеть. Образы img положил на sda5, пусть ждут часа.
2. Загрузил PuppyRus. На всякий пожарный снял MBR диска:
dd if=/dev/hdс of=mbr.bak bs=512 count=1
(восстанавливать: dd if=mbr.bak of=/dev/hdс
полное восстановление, с потерей таблицы партиций, сделанных после бэкапа, либо: dd if=/pathto/mbr.bak of=/dev/hdс bs=446 count=1
в этом случае новая таблица партиций останется нетронутой.)
Слил все данные с sda5 по сети на винт ПК, включая резервные img. Проверил - ничего не забыл? Т.о. на 2-м ПК полностью сохранённые 2 ОС и данные с ноута.
Запросил таблицу fdisk -l (понадобятся для восстановления точной копии), а также данные разделов GParted - чтобы не бодаться долго. В простом цифровом виде - размеры. В Пуппи винт видится как hdc (!), что не важно для процесса. Сохранил на флешку (!) цифири и MBR.
4. Прибил все разделы на винте. Выпил чаю :-)
5. Ребут. Загрузился с загрузочной дискеты w98 (или тому подобное), сделал fdisk /mbr (внимание, DOS утилита и команда) - создал новый master boot record.
5. Вернулся в PuppyRus. GParted и fdisk (надо менять id partition на первоначальные) восстановил прежнюю геометрию винта, проверил размеры - начало и конец, блоки. Важно! Все разделы, которые могли быть созданы под старыми номерами - создал. hda1 должен иметь флаг загружаемый - иначе Windows упрётся. Соответственно, получилась та же разметка, но hda5 стал hda7, а hda4 стал hda5. Теперь таблица в норме.
Новая таблица партиций
wolf@alex02:~$ sudo su
[sudo] password for wolf:
root@alex02:/home/wolf# fdisk -l
Диск /dev/sda: 160.0 ГБ, 160041885696 байт
255 heads, 63 sectors/track, 19457 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x15a215a1
Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 * 14 1972 15735667+ c W95 FAT32 (LBA)
/dev/sda2 1973 19457 140448262+ f W95 расшир. (LBA)
/dev/sda3 1 13 104391 83 Linux
/dev/sda5 1973 5766 30475273+ 83 Linux
/dev/sda6 5767 5888 979933+ 82 Linux своп / Solaris
/dev/sda7 5889 19457 108992961 b W95 FAT32
Пункты таблицы разделов расположены не в дисковом порядке
6. Залил по сети данные обратно на sda7.
7. Clonezilla восстановил рабочие разделы соотв:
Старый в Новый
sda1 sda1
sda3 sda3
sda4 sda5
MBR MBR
8. Ребут. Т.к. загрузочный раздел линукса sda3 в начале диска имеет тот же номер и размер, что и прошлый, Grub остался на месте и ядро тоже. Появилось приглашение Груба (текстовый режим). Загрузил винХП - ок. Линукс пока грузить нельзя, у него сменился номер раздела корня файловой системы с sda4 на sda5.
Теперь нужно подменить все ссылки на старый номер разделов новым.
а) sda5 -> sda7
б) sda4 -> sda5
Именно в таком порядке, начиная со старшего номера, чтобы избежать коллизии при последующей замене.
9. Вернулся в PuppyRus. Примонтировал раздел с корнем Кубунты 7.10, запустил mc, нажал поиск файла, в содержании которого есть "sda5", КUbuntu опознаёт диск как sda.
Итак, меняю sda5 на sda7. Поиск файлов - вывалился список, куча файлов. Логи, кэши и картинки с тумбанайлами не интересны, их можно удалить, система создаст заново. Я же хочу, чтобы при первой загрузке линукса всё стало рабочим, как было. Прочесал файлы конфигурации, хмл и проч (в mc есть F4 встроенный редактор, F4 замена, F7 поиск, осторожно - совпадения типа "poesda56" не интересуют, Esc - записать).
Ту же операцию проделал с подменой sda4 на sda5. Особое внимание файлам в каталоге
/etc
blkid.tab
blkid.tab.old
fstab
mtab
В fstab UUID старого раздела данных (sda5) поменял на новый (vol_id -u /dev/sda7).
Удалил битые симлинки на устройство sda5 в /home/user/.Desktop, проще создать из КДЕ заново.
Удалил каталог /mount/sda5, создал /mount/sda7 - права 40770, владелец root и группа plugdev.
10. Ребут и... Рабочая КUbuntu 7.10 с корнем в новой партиции.
ЗЫ: В общем, оказалось не страшно.