Как переместить раздел в GNU / Linux?

17

Как немного переместить раздел в начало диска? Parted хочет файловую систему по какой-то причине (я не знаю почему), я хочу просто сдвинуть все сектора влево ...

r@l:15:32:45:~# parted /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p                                                                
Model: HGST HTS 541010A9E680 (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  32.2GB  32.2GB  primary  fat32
 2      32.2GB  37.6GB  5360MB  primary
 3      37.6GB  1000GB  963GB   primary

(parted) move 3                                                           
WARNING: you are attempting to use parted to operate on (move) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs.  We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Error: Could not detect file system.   
Vi.
источник
Вы используете разделы без FS? Вы можете просто установить FS любому, fdiskа затем переместить их.
Питер
Таким образом, на самом деле это контейнер LUKS. Но я не думаю, что движитель разделов должен когда-либо заглядывать в файловую систему.
Ви.
gpartedсделал это хорошо для меня в симуляционной ситуации.
Palacsint
Может, наконец, в конце концов они это реализовали?
Ви.
1
Разведенный вариант 3.2 не имеет опции "переместить".
Ленн

Ответы:

4

sfdisk, который намеревается быть сценарием fdisk, с некоторой версии имеет --move-dataопцию. Пример из их справочной страницы :

echo '+100M,' | sfdisk --move-data /dev/sdc -N 1
gimpf
источник
15

Ручной способ с dd и fdisk:

# fdisk -l /dev/sdb | grep sdb3
/dev/sdb3        73402368  1953525167   940061400   83  Linux

# fdisk /dev/sdb
Command (m for help): d
Partition number (1-4): 3
Command (m for help): n
Partition number (1-4, default 3): 3
First sector (73385984-1953525167, default 73385984): 
Using default value 73385984
Last sector, +sectors or +size{K,M,G} (73385984-1953525167, default 1953525167): 
Using default value 1953525167
Command (m for help): w
The partition table has been altered!

# fdisk -l /dev/sdb | grep sdb3
/dev/sdb3        73385984  1953525167   940069592   83  Linux

# dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3 count=100 skip=$((73402368-73385984)) seek=0 2> /dev/null | file -s -
/dev/stdin: LUKS encrypted file, ver 1 [aes, cbc-essiv:sha256, sha1] UUID: af1c47f0-4ca5-4ea7-a091-065bd263653f

# dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3  skip=$((73402368-73385984)) seek=0 of=/dev/sdb3

# file -s /dev/sdb3
/dev/sdb3: sticky LUKS encrypted file, ver 1 [aes, cbc-essiv:sha256, sha1] UUID: af1c47f0-4ca5-4ea7-a091-065bd263653f

Сейчас жду около 2ч. (больше похоже на 18ч ...)

Примечание: это только перемещает данные назад, а не вперед.

Приостановка:

# pidof dd
907
# kill -STOP 907
# cat /proc/907/fdinfo/1
pos:    586921398272
flags:  0100001

# kill -9 907

remember 586921398272/512 = 1146330856

Резюмируя:

dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3  skip=$((1146330856+73402368-73385984)) seek=1146330856 of=/dev/sdb3
Vi.
источник
2
Спасатель! Кто-нибудь пытался использовать большее значение bs (по соображениям скорости)?
Давид Балажич
Убедитесь, что вы правильно пересчитали значения в случае другого bsразмера.
Ви.
3
почему нет dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb skip=73402368 seek=0 of=/dev/sdb3? таким образом, он должен работать даже при старте старого sdb3, а не внутри нового sdb3
solsTiCe
@solsTiCe, в чем разница между вашей командой и моей командой?
Ви.
3
Более крупный bs не помог мне сам по себе, однако bs=1M iflag=direct oflag=directсделал. Прошел от 40 МБ / с до 400 МБ / с на моем SSD. Также используйтеstatus=progress
Александр Дубинский
3

Вы всегда можете использовать dd.

  • Загрузка с liveCD (или любым другим способом, который гарантирует, что раздел не смонтирован)
  • dd if=/dev/sdc2 of=somefile bs=1M создать копию раздела в файле.
  • fdisk (или как угодно) для удаления раздела
  • fdisk (или что угодно) для создания раздела в нужном вам месте.
  • dd of=/dev/sdc2 if=somefile bs=1M восстановить содержимое из файла.
Hennes
источник
Как это сделать на месте? Этот раздел почти такой же большой, как и все другие жесткие диски в моем доме, взятые вместе.
Ви.
Могу ли я сделать что-то подобное dd if=/dev/sdb of=/dev/sdb bs=512 skip=N seek=M?
Ви.
Мог бы быть в состоянии Том, но сначала проверить это . Особенно если у вас нет резервной копии данных на разделе. (Также обратите внимание, что если у вас есть резервная копия, есть и более простые решения).
Хеннес
3
@Vi. Этот правильный первый ответ ответа никого не заслуживает отрицательного голосования, потому что этого требования «сделай это на месте» нигде в вопросе не существует.
zero2cx