Желательно это всё делать с LiveCD или хотя бы чтоб с целевого винта не была загружена система. Потому что тут же желательно сделать blockdev --rereadpt /dev/sda чтобы ядро перечитало таблицу разделов с этого диска и ты попробовал тут же смонтировать перенесённый раздел, и в случае проблем не перегружая систему всё починил, а если на этом диске корень, то сделать это не получится.
Вручную в hex-редакторе переставить 2-ю и 3-ю строки
Сразу видно, что ты ни разу не делал такого. Запись о разделе в таблице расположена двумя байтами на предыдущей строке и 14-ю на следующей. А всё потому что 55AA в конце.
Сразу видно, что ты ни разу не делал такого. Запись о разделе в таблице расположена двумя байтами на предыдущей строке и 14-ю на следующей.
Сразу видно, что ты мыслишь строки только визуально в редакторе + что ты крайне хреновый телепат.
Таблица разделов состоит из 4-х записей фиксированной длины. По каким смещениями они находятся — это уже чисто технический вопрос, если руки не из жопы.
так и не понял, вариант с удалением, созданием в parted/fdisk проканает? дополнительные действия чтоб раздел монтировался после нужны? видимо uuid поменяется и его надо поменять в /etc/fstab
так и не понял, вариант с удалением, созданием в parted/fdisk проканает?
да
дополнительные действия чтоб раздел монтировался после нужны?
да если монтируешь по sdaX, нет если монтируешь по uuid. uuid в разделе хранится
бекап делай нулевого сектора а не раздела. ничегокроме негоменяться не будет. Даже если ты накосячишь, но будешь знать по изначальному выхлопу parted номер первого сектора раздела ты сможешь всегда смонтировать его с -o loop, offset=номер сектора*512 и убедиться, что данные на месте
Большинство GUI утилит для работы с диском: создания разделов, файловых систем и прочего, при создании изменение раздела сразу же производят создание на нём файловой системы.
В Linux же есть и более тонкие средства:
fdisk - редактирование таблицы разделов.
mkfs.* - создание файловых систем.
Как видно понятие разметка диска и создание записей о разделах на нём является отдельной процедурой от создания на разделах, параметры которых описаны в таблице разделов в соответствующих записях, файловых систем.
Что вам нужно сделать:
1. Запускаете fdisk -l /dev/sda видите вашу таблицу разделов на первом диске;
2. Сохраняете её в файл или переписываете на лист, лучше переписать;
3. Удаляете записи о 2 и 3 разделах;
4. Вызываете процедуру создания нового раздела, выбираете его номер (номер записи), указываете 2 и вписываете параметры 3 записи с листа;
5. Затем создаёте 3 запись и указываете параметры 2 записи (раздела) с листка.
Вот и всё, дальше перзагружаетесь и готово.
Но если честно не ясно зачем вам нужно менять порядок записей в таблице разделов., сменятся только индексы блочных устройств соответствующих разделов.
У fdisk есть опция, которая приводит в порядок нумерцию разделов.
Какая? У меня логические диски на extended-разделе идут не в том порядке, в котором они в таблицах, удалить-создать не получилось — fdisk не даёт вставить при создании раздела те же самые номера секторов, что были перед удалением, а hex-редакторами по extended-разделу более геморно лазить, чем просто по 0-ому сектору. Если есть готовая опция, я бы поправил порядок.
man sfdisk, через промежуточный файл типа sfdisk -d |sfdisk
А если сдампить таблицу sfdisk'ом, поменять номера разделов и скормить отредактированную таблицу sfdisk'у, то я ничего не поломаю, и мои переставленные разделы вернутся на свои места соответственно номерам?
выведи fdisk -ul /dev/sda, схорони, затри в 0-ом секторе запись extended-раздела, затем из fdisk'a создай extended-раздел по тем же границам и в нём логические разделы в новом верном порядке.
естественно после затирания в 0-ом секторе записи extended-раздела blockdev --rereadpt /dev/sda. Ну и всё это с livecd, ибо если корень на /dev/sda ничего не выйдет, таблицу перечитать не даст, придётся в ребут.
выведи fdisk -ul /dev/sda, схорони, затри в 0-ом секторе запись extended-раздела, затем из fdisk'a создай extended-раздел по тем же границам и в нём логические разделы в новом верном порядке.
Не взлетело:
Команда (m для справки): p
Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders, всего 312581808 секторов
Units = секторы of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2b8aa173
Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 63 8193149 4096543+ 12 Compaq диагностика
/dev/sda2 * 8193150 90124649 40965750 7 HPFS/NTFS/exFAT
/dev/sda3 90126334 312580095 111226881 5 Расширенный
/dev/sda5 131251113 284848514 76798701 83 Linux
/dev/sda6 284848578 287916929 1534176 82 Linux своп / Solaris
/dev/sda7 287918080 312580095 12331008 83 Linux
/dev/sda8 90126336 92469247 1171456 82 Linux своп / Solaris
/dev/sda9 92471296 107118591 7323648 83 Linux
/dev/sda10 107120640 131250175 12064768 83 Linux
Пункты таблицы разделов расположены не в дисковом порядке
Команда (m для справки): d
Номер раздела (1-10): 3
Команда (m для справки): n
Действие команды
e расширенный
p основной раздел (1-4)
e
Номер раздела (1-4, по умолчанию 3): 3
Первый сектор (90124650-312581807, по умолчанию 90124650): 90126334
Last сектор, +секторы or +size{K,M,G} (90126334-312581807, по умолчанию 312581807): 312580095
Команда (m для справки): n
Действие команды
l логический (5 или более)
p основной раздел (1-4)
l
Первый сектор (90128382-312580095, по умолчанию 90128382): 90126336
Значение за пределами диапазона.
Первый сектор (90128382-312580095, по умолчанию 90128382):
Может, надо для extended-раздела поставить не старые границы, а то, что fdisk предлагает?
Interestingly, in sector mode, the default starting point is not 63 or 64 but 2048 in the current version of fdisk (2.17.2) so it is automatically taking care of the 4k sector size!
fdisk вот умеет сортировать разделы по номерам, если было sda1, за ним sda3, а за ним sda2, то сделает sda1, sda2, sda3. значит проблем поменять записи в mbr местами - нет.
Interestingly, in sector mode, the default starting point is not 63 or 64 but 2048 in the current version of fdisk (2.17.2) so it is automatically taking care of the 4k sector size!
Похоже, что у меня поломалось выравнивание из-за того, что я размечал диск по очереди разными версиями fdisk. А первые 2 раздела, которые я не трогал с момента покупки, тоже хреново выровнены — я даже не смогу тут завести grub2 с lvm на корневом разделе, потому что он не поместится.
Если согласиться с теми границами extended-раздела, которые предлагает fdisk, то логические всё равно не влазят. Похоже, придётся всё это снести и сделать заново, потому что выравнивание уже не спасти.
в фдиске нажми «с» (включи DOS Compatibility flag), почитай ворнинг о том, что он депрекейтед, и создавай разделы с тем выравниванием, каким захочешь :)
Возьми parted или старую версию fdisk, всё сработает.
Я тут откопал у fdisk, что если нажать x, f, то должны разделы встать по порядку. Вроде бы без сохранения оно что-то изменило. Но выравнивание на 2048 просто так уже не починить, но хоть разделы будут по порядку.
в фдиске нажми «с» (включи DOS Compatibility flag), почитай ворнинг о том, что он депрекейтед, и создавай разделы с тем выравниванием, каким захочешь :)
Дык, насколько я понял, оно хреново, если не на 2048 выровнено, поэтому надо переделывать всё. Или на винте с 512-байтными секторами пофиг?