LINUX.ORG.RU

Почитать в википедии или ещё где-нибудь про структуру GPT и выяснить её полный размер, затем удалять из начала и конца.

Xenius ★★★★★
()

Гвозди можно забивать молотком.
А как корректно забить гвоздь гаечным ключом?

thesis ★★★★★
()

Ты хочешь так черезпопчно сделать из gpt-разметки mbr-разметку что ли?

Radjah ★★★★★
()

Посмотреть исходный код wipefs.

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

Разметку GPT конечно смотрел: имеет два «заголовка» - один вначале, другой в конце (дублирует первый, но в обратной последовательности).

512(MBR) + 512(GPT Header) + 128/4*512(Partition Table) итого получается 17408

Первый «заголовок» стало быть удалить легко:

sudo dd if=/dev/zero of=/dev/sdX bs=512 count=34

А для удаления второго заголовка, так понимаю требуется определить размер всего диска, и вот здесь уже начинается кризис идей...

Ограничен в выборе программных средств (делаю это все в образе initramfs, лучше не спрашивайте зачем, это будет уже не по теме).

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

А не проще что-то вроде

echo 'x
z
y
w
' | gdisk /dev/sda

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

делаю это все в образе initramfs

В busybox есть wipefs.

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

Решил вопрос связкой «fdisk & dd». Отпишу решение с полным тестом удаление/восстановление - возможно кому нибудь пригодится.

Тест провел на следующей флешке:

sudo fdisk -l /dev/sdd

Disk /dev/sdd: 7,5 GiB, 8022654976 bytes, 15669248 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 15A4B379-6E0D-4222-B39A-A60A61EB48C5

Device     Start      End  Sectors  Size Type
/dev/sdd1   2048 15669214 15667167  7,5G Linux filesystem

sudo gdisk -l /dev/sdd
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Резервное копирование Primary GPT:

sudo dd if=/dev/sdd of=~/sdd.primary_gpt bs=512 count=34
34+0 записей получено
34+0 записей отправлено
 скопировано 17408 байт (17 kB), 0,00642818 c, 2,7 MB/c

Резервное копирование Secondary GPT:

_blocksize=$(fdisk -l /dev/sdd | grep Units | awk '{print $8}')
sudo dd if=/dev/sdd of=~/sdd.secondary_gpt skip=$((($(fdisk -l /dev/sdd | grep Disk | awk '{print $5}')-17408)/$_blocksize)) ibs=$_blocksize
34+0 записей получено
34+0 записей отправлено
 скопировано 17408 байт (17 kB), 0,00833474 c, 2,1 MB/c

Удаляю Primary GPT, проверяю что получается:

sudo dd if=/dev/zero of=/dev/sdd bs=512 count=34
34+0 записей получено
34+0 записей отправлено
 скопировано 17408 байт (17 kB), 0,00765282 c, 2,3 MB/c

sudo fdisk -l /dev/sdd

Disk /dev/sdd: 7,5 GiB, 8022654976 bytes, 15669248 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

sudo gdisk -l /dev/sdd
GPT fdisk (gdisk) version 0.8.10

Caution: invalid main GPT header, but valid backup; regenerating main header
from backup!

Caution! After loading partitions, the CRC doesn't check out!
Warning! Main partition table CRC mismatch! Loaded backup partition table
instead of main partition table!

Warning! One or more CRCs don't match. You should repair the disk!

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: damaged

Found invalid MBR and corrupt GPT. What do you want to do? (Using the
GPT MAY permit recovery of GPT data.)
 1 - Use current GPT
 2 - Create blank GPT

GPT повредили, но пока не уничтожили.

Удаляю Secondary GPT:

sudo dd if=/dev/zero of=/dev/sdd seek=$((($(fdisk -l /dev/sdd | grep Disk | awk '{print $5}')-17408)/$_blocksize)) obs=$_blocksize ibs=17408 count=1
1+0 записей получено
34+0 записей отправлено
 скопировано 17408 байт (17 kB), 0,0217623 c, 800 kB/c

Проверяю диск на наличие GPT:

sudo fdisk -l /dev/sdd

Disk /dev/sdd: 7,5 GiB, 8022654976 bytes, 15669248 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

sudo gdisk -l /dev/sdd
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.
Disk /dev/sdd: 15669248 sectors, 7.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 595409AB-6F78-4DD7-A1E9-84993BE23171
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 15669214
Partitions will be aligned on 2048-sector boundaries
Total free space is 15669181 sectors (7.5 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
GPT не обнаружен - все ок.

Пробую восстановить GPT из образов:

sudo dd if=~/sdd.primary_gpt of=/dev/sdd bs=512 count=34
34+0 записей получено
34+0 записей отправлено
 скопировано 17408 байт (17 kB), 0,00764047 c, 2,3 MB/c

sudo dd if=~/sdd.secondary_gpt of=/dev/sdd seek=$((($(fdisk -l /dev/sdd | grep Disk | awk '{print $5}')-17408)/$_blocksize)) obs=$_blocksize
The backup GPT table is corrupt, but the primary appears OK, so that will be used.
34+0 записей получено
34+0 записей отправлено
 скопировано 17408 байт (17 kB), 0,022258 c, 782 kB/c
Образ второй структуры GPT, похоже не удался, хотя корректно затерся, странно....

Проверяем GPT на наличие и здравие:

sudo fdisk -l /dev/sdd

Disk /dev/sdd: 7,5 GiB, 8022654976 bytes, 15669248 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 15A4B379-6E0D-4222-B39A-A60A61EB48C5

Device     Start      End  Sectors  Size Type
/dev/sdd1   2048 15669214 15667167  7,5G Linux filesystem

gdisk -l /dev/sdd
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Все ок! В итоге все благополучно смонтировалось, файлы не пострадали.

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

А для удаления второго заголовка, так понимаю требуется определить размер всего диска, и вот здесь уже начинается кризис идей...

Ну я пользуюсь fdisk -l, а вообще можешь забить на второй заголовок, если ты после этого будешь mbr использовать.

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

забить не получится, fdisk -l его будет отлавливать и недоуменно ругаться. Работать можно, но немного раздражает. Если требуется затереть GPT делать это надо с начала и до конца.

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