จะย้ายพาร์ติชั่นใน 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
vesion 3.2 ที่แยกส่วนไม่มี "ย้าย" เป็นตัวเลือก
Lenne

คำตอบ:


4

sfdiskซึ่งมีความตั้งใจที่จะเป็นสคริปต์ fdisk เนื่องจากบางรุ่นมี--move-dataตัวเลือก ตัวอย่างจากman page :

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 ที่ใหญ่กว่า (เพื่อเหตุผลด้านความเร็ว)
David Balažic

ตรวจสอบให้แน่ใจว่าคุณคำนวณค่าอย่างเหมาะสมในกรณีที่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 ที่ใหญ่กว่าไม่ได้ช่วยฉันด้วยตัวเอง แต่bs=1M iflag=direct oflag=directทำ เปลี่ยนจาก 40 MB / s เป็น 400 MB / s บน SSD ของฉัน ใช้เช่นกันstatus=progress
Aleksandr Dubinsky

3

ddคุณสามารถใช้

  • บูตจาก liveCD (หรือวิธีอื่นใดซึ่งทำให้แน่ใจว่าไม่ได้ติดตั้งพาร์ติชัน)
  • dd if=/dev/sdc2 of=somefile bs=1M เพื่อสร้างสำเนาของพาร์ติชันบนไฟล์
  • fdisk (หรืออะไรก็ได้ที่คุณต้องการ) เพื่อลบพาร์ติชั่น
  • fdisk (หรืออะไรก็ได้ที่คุณต้องการ) เพื่อสร้างพาร์ติชั่นในตำแหน่งที่คุณต้องการ
  • dd of=/dev/sdc2 if=somefile bs=1M เพื่อเรียกคืนเนื้อหาจากไฟล์

วิธีการทำในสถานที่? พาร์ติชั่นนี้ใหญ่พอ ๆ กับ HDD อื่น ๆ ในบ้านของฉัน
วิ

ฉันสามารถทำอะไรได้dd if=/dev/sdb of=/dev/sdb bs=512 skip=N seek=Mบ้าง
วิ

อาจจะเป็นทอม แต่สามารถทดสอบครั้งแรก Esp หากคุณไม่มีข้อมูลสำรองในพาร์ติชัน (โปรดทราบว่าหากคุณมีการสำรองข้อมูลจะมีวิธีการแก้ไขที่ง่ายกว่า)
Hennes

3
@Vi คำตอบแรกที่ถูกต้องและเหมาะสมของคำตอบนี้สมควรได้รับไม่มีใครลงคะแนนเพราะสิ่งนี้มีความต้องการ "ทำในสถานที่" ไม่มีที่ใดในคำถาม
zero2cx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.