Як перемістити розділ у GNU / Linux?


17

Як трохи перемістити розділ на початок диска? Розділений хоче чомусь файлову систему (не знаю чому), я хочу просто зрушити всі сектори вліво ...

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.   

Чи використовуєте ви розділи без FS? Ви можете просто встановити FS комусь, fdiskа потім перемістити їх.
Пітер

Таким чином, насправді є контейнер LUKS. Але я не думаю, що переміщувач розділів повинен коли-небудь заглядати всередину файлової системи.
Ві.

gpartedзробив це добре для мене в симуляційній ситуації.
palacsint

Може, нарешті, врешті-решт, вони це втілили?
Ві.

1
Розділена версія 3.2 не має "переміщення" як опції.
Ленна

Відповіді:


4

sfdisk, який має намір створити скрипт, який може бути написаний на скрипті, має з певної версії --move-dataможливість. Приклад зі сторінки чоловіка :

echo '+100M,' | sfdisk --move-data /dev/sdc -N 1

16

Ручний спосіб з 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

2
Рятувальник! Хто-небудь намагався використовувати більшу величину bs (з причин швидкості)?
Давид Балажич

Переконайтесь, що ви перерахували значення належним чином у разі іншого bsрозміру.
Ві.

3
чому ні dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb skip=73402368 seek=0 of=/dev/sdb3? таким чином він повинен працювати навіть f запуск старого sdb3 в не всередині нового sdb3
solsTiCe

@solsTiCe, в чому різниця між вашою командою та моєю командою?
Ві.

3
Однак більші особи не допомогли мені самостійно 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 для відновлення вмісту з файлу.

Як це зробити на місці? Цей розділ майже такий же великий, як і всі інші жорсткі диски в моєму будинку разом.
Ві.

Чи можу я зробити щось подібне dd if=/dev/sdb of=/dev/sdb bs=512 skip=N seek=M?
Ві.

Ви можете вміти, але спершу протестуйте . Esp якщо у вас немає резервної копії даних на розділі. (Також зауважте, що якщо у вас є резервна копія, існують способи простіших рішень).
Геннес

3
@Vi. Ця правильна, перша відповідь на відповідь не заслуговує на те, щоб ніхто не голосував, оскільки ця вимога "зроби це на місці" ніде в питанні не існує.
zero2cx
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.