Измените номер раздела с sda1 на sda2

20

У меня есть диск с двумя разделами: sda1 и sda2. Я хотел бы изменить количество sda1 на sda2 и sda2 на sda1.

Это возможно, но я не помню процедуру. т.е. мой первый раздел будет sda2, а второй sda1, поэтому мне нужно указать порядок вручную, а не автоматический порядок, как в fdisk -> x -> f.

Как я могу изменить заказ? Ссылки на руководства или учебники также полезны.

Благодарю.

Причина: у меня есть приложение, которое требует чтения данных из sda1, но данные находятся в sda2. Изменение таблицы разделов - более быстрое решение этой проблемы. Система не критична, но я не хочу останавливать систему слишком долго.

Обновить : версия OpenBSD для fdisk включает эту функцию.

Руфо Эль Магуфо
источник
1
Поскольку обычно делать то, о чем вы просите, плохая идея, опишите, почему вы этого хотите.
rozcietrzewiacz
У меня есть резервные копии, не волнуйтесь :)
Руфо Эль Магуфо
Хорошо, вы были предупреждены и хотите играть, так что вот так ... :)
rozcietrzewiacz

Ответы:

17

К вашему сведению, это плохая идея, и вы можете потерять все. Если вы все еще хотите сделать это, выполните следующие действия:

  1. не делай этого. Если это не поможет, тогда:
  2. Используйте sfdiskинструмент: во-первых, сделайте резервную копию таблицы разделов, используя

    sfdisk -d /dev/sda > sda.out
    

    Тогда пойти на это:

    sfdisk /dev/sda -O sda-partition-sectors.save
    

    Вы увидите что-то вроде этого

    Checking that no-one is using this disk right now ...
    OK
    
    Disk /dev/sda: 1018 cylinders, 124 heads, 62 sectors/track
    Old situation:
    Units = cylinders of 3936256 bytes, blocks of 1024 bytes, counting from 0
    
       Device Boot Start     End   #cyls    #blocks   Id  System
    /dev/sda1          0+      5       6-     23063+  83  Linux
    /dev/sda2          6    1017    1012    3890128   83  Linux
    /dev/sda3          0       -       0          0    0  Empty
    /dev/sda4          0       -       0          0    0  Empty
    Input in the following format; absent fields get a default value.
    <start> <size> <type [E,S,L,X,hex]> <bootable [-,*]> <c,h,s> <c,h,s>
    Usually you only need to specify <start> and <size> (and perhaps <type>).
    
    /dev/sda1 :
    

Теперь он просит вас дать новые подробности для раздела 'sda1'. Итак, вы должны указать номера sda2 здесь. Итак, я положил «6 1012» здесь и нажмите Enter:

    /dev/sda1 :6 1012
    /dev/sda1          6    1017    1012    3890128   83  Linux
    /dev/sda2 :

Теперь проверьте , если число напечатанных после нажатия Enter являются точно такими же , как напечатаны ранее для sda2. Если все в порядке, продолжайте давать новые номера для sda2:

    /dev/sda2 :0
    /dev/sda2          0+      5       6-     23063+  83  Linux
    /dev/sda3 :

На этот раз этого было достаточно, чтобы ввести «0» в моем случае - но вы должны убедиться, что числа не перепутаны в вашем.

Затем продолжите работу с другими разделами таким же образом. Если вы уже достигли конца диска, достаточно нажать Enter. Наконец, проверьте еще раз, что все числа в порядке и сохраните таблицу разделов (или нет). Если вы что-то напутали, посмотрите man sfdiskи описания опций «-d», «-O» и «-I».

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

rozcietrzewiacz
источник
Спасибо за ответ. Вы правы, это страшно :).
Руфо Эль Магуфо
Чудесно зло. Что произойдет, если цифры не совпадают? Сдаться и переделить? (Это то, что я сделал)
supervacuo
1
@supervacuo Testisk может помочь вам тогда. Найдите testdiskпакет в базе данных программного обеспечения вашего дистрибутива.
rozcietrzewiacz
@supervacuo Если числа не совпадают, то ваши новые разделы не совпадают со старыми разделами, и вы можете их испортить. Если вы больше ничего не делаете с диском, вы можете восстановить таблицу разделов, на которую, как мы надеемся, сделали резервную копию, перед запуском и повторить попытку. Если нет, то вам лучше надеяться, что правильные числа все еще где-то на вашей консоли, или что вы можете вспомнить точный размер и расположение ваших разделов и вычислить числа.
Майкл Джонсон
31

Я просто сделал это проще:

# sfdisk -d /dev/sdb > sdb.bkp

оставить копию для безопасности

# cp sdb.bkp sdb.new 

Теперь отредактируйте sdb.new, изменив ТОЛЬКО порядок строк и номера разделов, как в моем случае:

из

# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=  1026048, size=975747120, Id=83
/dev/sdb2 : start=     2048, size=   204800, Id=83
/dev/sdb3 : start=   206848, size=   819200, Id= b
/dev/sdb4 : start=        0, size=        0, Id= 0

в

# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=     2048, size=   204800, Id=83
/dev/sdb2 : start=   206848, size=   819200, Id= b
/dev/sdb3 : start=  1026048, size=975747120, Id=83
/dev/sdb4 : start=        0, size=        0, Id= 0

затем бросить его обратно в таблицу разделов диска?

# sfdisk /dev/sdb < sdb.new

Моя последовательность нумерации была искажена после того, как я сжался и сдвинул вправо единственный раздел (sdb1), чтобы добавить два меньших раздела в начале диска, используя gparted .

Если последняя команда не работает, как в моем случае, измените ее на:

# sfdisk --no-reread -f /dev/sdb < sdb.new
Жоао С Вейга
источник
Это сработало для меня, и мне не понадобилась вторая команда.
Аарон Франке
Для меня также спасибо;) ... Обратите внимание, убедитесь, что все ваши разделы размонтированы перед командами
отключить
3

Вам придется переписать таблицу разделов диска, чтобы изменить порядок, что немного рискованно. На вашем месте я бы решил проблему, из-за которой вы захотите поменять порядок имен устройств и оставить разделы в покое.

Например, если у вас есть сценарий, который должен быть запущен на обеих машинах, и вы хотите, чтобы он имел доступ к одному и тому же устройству, создайте ссылку в другом каталоге (не в / dev), который имеет одинаковое имя на обоих серверах, но ссылается на / dev / sda1 для одного и / dev / sda2 для другого.

Вы можете использовать любой редактор разделов ( fdiskили cfdisk) для редактирования разделов, но вам нужно либо записать текущие настройки, либо сделать снимок экрана. Удалите два раздела, а затем создайте их вручную, указав все правильные значения. Загрузите систему с LiveCD, чтобы сделать это.

Майкл Диллон
источник
Я ничего не могу изменить. Моя система - Xen DomU, и проблема в Dom0. Я мог бы воссоздать порядок разделов, но в моей ситуации это более сложно. Но все равно хотелось бы узнать, как поменять порядок.
Руфо Эль Магуфо
2

Во-первых, все это упражнение в том, чтобы изо всех сил ломать вещи, но в любом случае, вот другой подход, который вы можете попробовать.

Примечание. Вы не упомянули, откуда вы загружаетесь, и это решение, и никто другой в то время, когда я пишу это, не решают, что вам нужно сделать, чтобы LILO или GRUB работали должным образом.

/dev/sda1и /dev/sda2являются блочными устройствами (8,1) и (8,2). Вы можете попробовать использовать, mknodчтобы просто поменять их местами.

telinit 1
(...)
rm -f /dev/sda{1,2}; mknod /dev/sda1 b 8 2; mknod /dev/sda2 b 8 1
chmod 640 /dev/sda{1,2}; chown root:disk /dev/sda{1,2}
reboot

Просто помните, что этот обмен будет происходить только после того, как ваш /dev/загрузочный раздел загрузится при загрузке, поэтому у вас initrdостанутся «правильные», если вы не исправите это там (упражнение для читателя - mkinitrdскопируете странность?) Это также не делает адрес контекстов SELinux.

Аарон Д. Мараско
источник
Загрузчик не проблема :). Спасибо за решение, но мне нужно изменить порядок в таблице разделов, а не в системе.
Руфо Эль Магуфо
1
Это не сработает ни в одной системе, использующей udev, и поможет, только если приложение прочитает из файла с именем /dev/sda(в отличие от непосредственного чтения с диска).
Жиль "ТАК - перестань быть злым"
Оба - согласились. Весь вопрос ИМХО это упражнение на боль. Я не был уверен насчет udevвещей; по-видимому, первая система, в которую я sshпопал, не имела ее.
Аарон Д. Мараско
2

Я только что обнаружил удивительно простое решение этой проблемы. Скажем, у вас есть только один раздел с именем /dev/sda3. Вы хотите, чтобы это называлось /dev/sda1. Открыть gdisk, преобразовать таблицу разделов в GPT, записать и выйти. Затем откройте его снова, нажмите сортировку (это изменит номер GPT на 1), а затем преобразуйте GPT обратно в MBR с помощью параметров эксперта.

user1980127
источник
1

- Редактирование разделов / dev / sda3 в / dev / sda2 в терминале от имени пользователя root -

  1. Резервная таблица разделов

    sfdisk -d / dev / sda> sda.bkp

  2. Скопировать резервную копию таблицы разделов в новую таблицу разделов

    cp sda.bkp sda.new

  3. Изменить новую таблицу разделов

    gedit sda.new

введите описание изображения здесь

Сохранить, закрыть

  1. Переустановите новую таблицу разделов

    sfdisk --no-reread -f / dev / sda <sda.new

  2. Перезагрузить компьютер

user264681
источник
Хотя это выполнимо, я бы порекомендовал GParted LiveCD
eyoung100
1
Я думаю, что вы можете сделать лучше, чем снимок экрана текстового редактора с немонокальным шрифтом, видимой точкой вставки и видимыми ошибками проверки орфографии.
Майкл Джонсон