FastNetMon

Показаны сообщения с ярлыком fdisk. Показать все сообщения
Показаны сообщения с ярлыком fdisk. Показать все сообщения

пятница, 20 мая 2011 г.

Создание полноценной таблицы разделов в файле

Очевидный подход - создать файл, заполненный нулями, и попробовать создать в нем таблицу разделов. Итак, платформа: Debian 6 Squeeze.

Пробуем:
dd if=/dev/zero of=whole_disk.img bs=512 count=10000000
10000000+0 records in
10000000+0 records out
5120000000 bytes (5.1 GB) copied, 34.7126 s, 147 MB/s

Создаем таблицу разделов:
parted whole_disk.img mklabel msdos

Создаем 1 раздела:
parted whole_disk.img mkpart primary ext3 1 1024
parted whole_disk.img mkpart primary ext3 1024 100%

И в результате получили два аккуратненьких раздела:
parted whole_disk.img
GNU Parted 2.3
Using /root/whole_disk.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: (file)
Disk /root/whole_disk.img: 5161MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
1 1049kB 1024MB 1023MB primary
2 1024MB 5160MB 4136MB primary

(parted)

Но fdisk на них орет благим матом:
fdisk -l whole_disk.img
You must set cylinders.
You can do this from the extra functions menu.

Disk whole_disk.img: 0 MB, 0 bytes
4 heads, 32 sectors/track, 0 cylinders
Units = cylinders of 128 * 512 = 65536 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0003e6d7

Device Boot Start End Blocks Id System
whole_disk.img1 17 15632 999424 83 Linux
Partition 1 has different physical/logical endings:
phys=(1023, 3, 32) logical=(15631, 3, 32)
whole_disk.img2 15633 78736 4038656 83 Linux
Partition 2 has different physical/logical beginnings (non-Linux?):
phys=(1023, 3, 32) logical=(15632, 0, 1)
Partition 2 has different physical/logical endings:
phys=(1023, 3, 32) logical=(78735, 3, 32)

Но если файл смонтировать как диск:
losetup /dev/loop0 whole_disk.img

То с выдачей fdisk станет все ок:
fdisk -l /dev/loop0

Disk /dev/loop0: 5120 MB, 5120000000 bytes
4 heads, 32 sectors/track, 78125 cylinders
Units = cylinders of 128 * 512 = 65536 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000a619a

Device Boot Start End Blocks Id System
/dev/loop0p1 17 15632 999424 83 Linux
/dev/loop0p2 15633 78112 3998720 83 Linux

Теперь нам нужно каким-то образом подключить массивы на этом диске к системе. Для этого установим kpartx:
apt-get install kpartx

Для начала получим список имеющихся массивов:
kpartx -l /dev/loop0
loop0p1 : 0 1998848 /dev/loop0 2048
loop0p2 : 0 7997440 /dev/loop0 2000896

Отлично, теперь подключим их к системе через device mapper:
kpartx -a /dev/loop0

После этого у нас появятся два раздела в системе:
ls -al /dev/mapper/
total 0
drwxr-xr-x 2 root root 100 May 20 01:17 .
drwxr-xr-x 18 root root 3.2K May 20 01:17 ..
crw------- 1 root root 10, 59 May 19 21:41 control
lrwxrwxrwx 1 root root 7 May 20 01:17 loop0p1 -> ../dm-0
lrwxrwxrwx 1 root root 7 May 20 01:17 loop0p2 -> ../dm-1

Это как раз разделы с нашего виртуального жесткого диска. Все, теперь с ними можно работать как угодно!

После окончания работ отмонтируем все:
kpartx -d /dev/loop0

Все ок:
ls -al /dev/mapper/
total 0
drwxr-xr-x 2 root root 60 May 20 01:19 .
drwxr-xr-x 18 root root 3.1K May 20 01:19 ..
crw------- 1 root root 10, 59 May 19 21:41 control

понедельник, 6 сентября 2010 г.

Как удалить все до единого разделы с диска в Linux?

Итак, имеем сглючивший софт, который сотворил нечто вот такое:
fdisk -l /dev/sda

Disk /dev/sda: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000a44f0

Device Boot Start End Blocks Id System
/dev/sda1 1 523 4199044+ fd Linux raid autodetect
/dev/sda2 524 785 2104515 fd Linux raid autodetect
/dev/sda3 786 1177 3148740 fd Linux raid autodetect
/dev/sda4 1178 182401 1455681780 85 Linux extended
/dev/sda5 1178 1569 3148739+ fd Linux raid autodetect
/dev/sda6 1570 1961 3148739+ fd Linux raid autodetect
/dev/sda7 1962 2353 3148739+ fd Linux raid autodetect
/dev/sda8 2354 2745 3148739+ fd Linux raid autodetect
/dev/sda9 2746 3137 3148739+ fd Linux raid autodetect
/dev/sda10 3138 3529 3148739+ fd Linux raid autodetect
/dev/sda11 3530 3921 3148739+ fd Linux raid autodetect
/dev/sda12 3922 4313 3148739+ fd Linux raid autodetect
/dev/sda13 4314 4705 3148739+ fd Linux raid autodetect
/dev/sda14 4706 5097 3148739+ fd Linux raid autodetect
/dev/sda15 5098 5489 3148739+ fd Linux raid autodetect
/dev/sda16 5490 5881 3148739+ fd Linux raid autodetect
/dev/sda17 5882 6273 3148739+ fd Linux raid autodetect
/dev/sda18 6274 6665 3148739+ fd Linux raid autodetect
/dev/sda19 6666 7057 3148739+ fd Linux raid autodetect
/dev/sda20 7058 7449 3148739+ fd Linux raid autodetect
/dev/sda21 7450 7841 3148739+ fd Linux raid autodetect
/dev/sda22 7842 8233 3148739+ fd Linux raid autodetect
/dev/sda23 8234 8625 3148739+ fd Linux raid autodetect
/dev/sda24 8626 9017 3148739+ fd Linux raid autodetect
/dev/sda25 9018 9409 3148739+ fd Linux raid autodetect
/dev/sda26 9410 9801 3148739+ fd Linux raid autodetect
/dev/sda27 9802 10193 3148739+ fd Linux raid autodetect
/dev/sda28 10194 10585 3148739+ fd Linux raid autodetect
/dev/sda29 10586 10977 3148739+ fd Linux raid autodetect
/dev/sda30 10978 11369 3148739+ fd Linux raid autodetect
/dev/sda31 11370 11761 3148739+ fd Linux raid autodetect
/dev/sda32 11762 12153 3148739+ fd Linux raid autodetect
/dev/sda33 12154 12545 3148739+ fd Linux raid autodetect
/dev/sda34 12546 12937 3148739+ fd Linux raid autodetect
/dev/sda35 12938 13329 3148739+ fd Linux raid autodetect
/dev/sda36 13330 13721 3148739+ fd Linux raid autodetect
/dev/sda37 13722 14113 3148739+ fd Linux raid autodetect
/dev/sda38 14114 14505 3148739+ fd Linux raid autodetect
/dev/sda39 14506 14897 3148739+ fd Linux raid autodetect
/dev/sda40 14898 15289 3148739+ fd Linux raid autodetect
/dev/sda41 15290 15681 3148739+ fd Linux raid autodetect
/dev/sda42 15682 16073 3148739+ fd Linux raid autodetect
/dev/sda43 16074 16465 3148739+ fd Linux raid autodetect
/dev/sda44 16466 16857 3148739+ fd Linux raid autodetect
/dev/sda45 16858 17249 3148739+ fd Linux raid autodetect
/dev/sda46 17250 17641 3148739+ fd Linux raid autodetect
/dev/sda47 17642 18033 3148739+ fd Linux raid autodetect
/dev/sda48 18034 18425 3148739+ fd Linux raid autodetect
/dev/sda49 18426 18817 3148739+ fd Linux raid autodetect
/dev/sda50 18818 19209 3148739+ fd Linux raid autodetect
/dev/sda51 19210 19601 3148739+ fd Linux raid autodetect
/dev/sda52 19602 19993 3148739+ fd Linux raid autodetect
/dev/sda53 19994 20385 3148739+ fd Linux raid autodetect
/dev/sda54 20386 182401 1301393519+ fd Linux raid autodetect

Удалять все это руками - самоубийство. Поэтому требуется автоматизация :) Здесь нам поможет parted:

parted /dev/sda
GNU Parted 1.8.8
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
New disk label type? [msdos]?
(parted) quit
Information: You may need to update /etc/fstab.

Вот и все, диск идеально чист:
fdisk -l /dev/sda

Disk /dev/sda: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000a44f0

Device Boot Start End Blocks Id System

По материалам: http://www.virtualvcp.com/linux-technical-guides/125-clearing-a-guid-partition-table-gpt-in-linux