LINUX.ORG.RU
Ответ на: комментарий от savgur

фэтож по идее таблица разделов определяет какой номер у раздела, без удаления-создания вроде не обойтись

savgur
() автор топика

Лучше пользоваться /dev/disk/by-UUID/*, тогда и проблем таких не возникнет

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

модификация таблицы != модификация самих разделов
не?

anonymous
()
Ответ на: комментарий от savgur

модификация таблицы != модификация самих разделов

не?

да, только требует ли это удаления раздела? если нет то как?

savgur
() автор топика

что parted, что fdisk, оперируют только таблицей разделов в конце 0-вого сектора (если речь о sda1-sda4). Так что можешь смело провернуть следующее:

parted /dev/sda

unit s //показ в секторах

p //отпечатать старую таблицу на память

rm 3

mkpart > number 2 > primary > ext3 > start sector из старой таблицы > new sector из новой таблицы

Это при условии, что sda2 нет. Или он есть, но н после преобразования станет sda3 (поменяешь местами)

Сам раздел и данные на нём при этом никто не трогает. Только перезапись кусочка в 16 байт в нулевом секторе винчестера.

При желании можешь сделать это в hexedit прямо на винте ручками, если разберёшься, как размещены 16-байтные записи разделов.

anonymous
()
Ответ на: комментарий от savgur

Три варианта.

1. через udev можешь сделать алиас sda2 -> sda3

2. в fdisk'e можно формально удалить sda3 и создать sda2 с теми же параметрами что и sda3 (начало, конец). Данные не пострадают.

3. Забить. sda2 ничуть не лучше sda3 — просто имя.

sdio ★★★★★
()

Вручную в hex-редакторе переставить 2-ю и 3-ю строки таблицы разделов. В чем проблема-то?

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

s/new/last sector

Желательно это всё делать с LiveCD или хотя бы чтоб с целевого винта не была загружена система. Потому что тут же желательно сделать blockdev --rereadpt /dev/sda чтобы ядро перечитало таблицу разделов с этого диска и ты попробовал тут же смонтировать перенесённый раздел, и в случае проблем не перегружая систему всё починил, а если на этом диске корень, то сделать это не получится.

anonymous
()
Ответ на: комментарий от geekless

Вручную в hex-редакторе переставить 2-ю и 3-ю строки

Сразу видно, что ты ни разу не делал такого. Запись о разделе в таблице расположена двумя байтами на предыдущей строке и 14-ю на следующей. А всё потому что 55AA в конце.

anonymous
()
Ответ на: комментарий от savgur

acronis disc director

выбрось эту каку, а то сейчас потрёшь все разделы из таблицы случайно, потом искать testdisk'ом будешь

anonymous
()
Ответ на: комментарий от savgur

нет
я выше и дальше по треду всё разжевали

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

Сразу видно, что ты ни разу не делал такого. Запись о разделе в таблице расположена двумя байтами на предыдущей строке и 14-ю на следующей.

Сразу видно, что ты мыслишь строки только визуально в редакторе + что ты крайне хреновый телепат.

Таблица разделов состоит из 4-х записей фиксированной длины. По каким смещениями они находятся — это уже чисто технический вопрос, если руки не из жопы.

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

раздел не корневой, home

так и не понял, вариант с удалением, созданием в parted/fdisk проканает? дополнительные действия чтоб раздел монтировался после нужны? видимо uuid поменяется и его надо поменять в /etc/fstab

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

Я тебе сейчас умный вещь скажу, только ты не обижайся, НЕ ТРОГАЙ диск, все хорошо и так.

трону, трону, бекапчик только сделаю и обязательно трону

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

так и не понял, вариант с удалением, созданием в parted/fdisk проканает?

да

дополнительные действия чтоб раздел монтировался после нужны?

да если монтируешь по sdaX, нет если монтируешь по uuid. uuid в разделе хранится

бекап делай нулевого сектора а не раздела. ничегокроме негоменяться не будет. Даже если ты накосячишь, но будешь знать по изначальному выхлопу parted номер первого сектора раздела ты сможешь всегда смонтировать его с -o loop, offset=номер сектора*512 и убедиться, что данные на месте

anonymous
()

Это что - новый вариант серпом по яйцам?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от geekless

Сразу видно, что ты мыслишь строки только визуально в редакторе

А ты мыслишь о строках выкорябанных на физическом накопителе? :)

По каким смещениями они находятся — это уже чисто технический вопрос, если руки не из жопы.

Ну признайся, что ты не знал и всегда думал, что четыре последние строки 0-го сектора это и есть таблица разделов по строке на раздел :)

anonymous
()
Ответ на: комментарий от savgur

Всё потому что вы используете не те средства.

Большинство GUI утилит для работы с диском: создания разделов, файловых систем и прочего, при создании изменение раздела сразу же производят создание на нём файловой системы.

В Linux же есть и более тонкие средства:

  • fdisk - редактирование таблицы разделов.
  • mkfs.* - создание файловых систем.

Как видно понятие разметка диска и создание записей о разделах на нём является отдельной процедурой от создания на разделах, параметры которых описаны в таблице разделов в соответствующих записях, файловых систем.

Что вам нужно сделать:
1. Запускаете fdisk -l /dev/sda видите вашу таблицу разделов на первом диске;
2. Сохраняете её в файл или переписываете на лист, лучше переписать;
3. Удаляете записи о 2 и 3 разделах;
4. Вызываете процедуру создания нового раздела, выбираете его номер (номер записи), указываете 2 и вписываете параметры 3 записи с листа;
5. Затем создаёте 3 запись и указываете параметры 2 записи (раздела) с листка.

Вот и всё, дальше перзагружаетесь и готово.

Но если честно не ясно зачем вам нужно менять порядок записей в таблице разделов., сменятся только индексы блочных устройств соответствующих разделов.

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

У fdisk есть опция, которая приводит в порядок нумерцию разделов.

Она не сработала, пишет что порядок в норме.

Но идея с секторами работает на ура, только делал я это не parted, а fdisk. Всем мерси.

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

У fdisk есть опция, которая приводит в порядок нумерцию разделов.

Какая? У меня логические диски на extended-разделе идут не в том порядке, в котором они в таблицах, удалить-создать не получилось — fdisk не даёт вставить при создании раздела те же самые номера секторов, что были перед удалением, а hex-редакторами по extended-разделу более геморно лазить, чем просто по 0-ому сектору. Если есть готовая опция, я бы поправил порядок.

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

man sfdisk, через промежуточный файл типа sfdisk -d |sfdisk

А если сдампить таблицу sfdisk'ом, поменять номера разделов и скормить отредактированную таблицу sfdisk'у, то я ничего не поломаю, и мои переставленные разделы вернутся на свои места соответственно номерам?

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

выведи fdisk -ul /dev/sda, схорони, затри в 0-ом секторе запись extended-раздела, затем из fdisk'a создай extended-раздел по тем же границам и в нём логические разделы в новом верном порядке.

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

естественно после затирания в 0-ом секторе записи extended-раздела blockdev --rereadpt /dev/sda. Ну и всё это с livecd, ибо если корень на /dev/sda ничего не выйдет, таблицу перечитать не даст, придётся в ребут.

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

выведи 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 предлагает?

gentoo_root ★★★★★
()
# dd if=/dev/sda of=sda-mbr-orig.bin count=1
# perl -e 'local$/;print pack a462a16a16a18=>(unpack a462a16a16a18=><>)[0,2,1,3]' <sda-mbr-orig.bin >sda-mbr-new.bin
# dd of=/dev/sda if=sda-mbr-new.bin

если не боишься ;)

arsi ★★★★★
()

fdisk вот умеет сортировать разделы по номерам, если было sda1, за ним sda3, а за ним sda2, то сделает sda1, sda2, sda3. значит проблем поменять записи в mbr местами - нет.

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

Что за винт? Обычный или ssd?

Обычный винт.

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, то логические всё равно не влазят. Похоже, придётся всё это снести и сделать заново, потому что выравнивание уже не спасти.

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

в фдиске нажми «с» (включи DOS Compatibility flag), почитай ворнинг о том, что он депрекейтед, и создавай разделы с тем выравниванием, каким захочешь :)

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

Возьми parted или старую версию fdisk, всё сработает.

Я тут откопал у fdisk, что если нажать x, f, то должны разделы встать по порядку. Вроде бы без сохранения оно что-то изменило. Но выравнивание на 2048 просто так уже не починить, но хоть разделы будут по порядку.

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

в фдиске нажми «с» (включи DOS Compatibility flag), почитай ворнинг о том, что он депрекейтед, и создавай разделы с тем выравниванием, каким захочешь :)

Дык, насколько я понял, оно хреново, если не на 2048 выровнено, поэтому надо переделывать всё. Или на винте с 512-байтными секторами пофиг?

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

пофиг.

OK, тогда попробую на досуге или «x f», или «с» и руками расставить разделы. Спасибо за помощь тебе и анонимусу.

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

я так делал много раз но обычно через файл. а ходу он тебе не даст сделать.

есть ещё волшебный ключ x в fdisk

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