เปลี่ยนหมายเลขของพาร์ติชันจาก sda1 เป็น sda2


20

ฉันมีดิสก์ที่มีสองพาร์ติชัน: sda1 และ sda2 ฉันต้องการเปลี่ยนจำนวน sda1 เป็น sda2 และ sda2 เป็น sda1

เป็นไปได้ แต่ฉันจำขั้นตอนไม่ได้ นั่นคือพาร์ติชั่นแรกของฉันจะเป็น sda2 และ sda1 ตัวที่สองดังนั้นฉันต้องระบุคำสั่งด้วยตนเองไม่ใช่การสั่งซื้ออัตโนมัติเช่นใน fdisk -> x -> f

ฉันจะเปลี่ยนคำสั่งซื้อได้อย่างไร ลิงค์ไปยังคู่มือหรือบทช่วยสอนก็มีประโยชน์เช่นกัน

ขอบคุณ

เหตุผล: ฉันมีแอปพลิเคชันที่ต้องการอ่านข้อมูลจาก sda1 แต่ข้อมูลอยู่ใน sda2 เปลี่ยนตารางพาร์ทิชันเป็นวิธีที่เร็วกว่าสำหรับปัญหานี้ ระบบไม่สำคัญ แต่ฉันไม่ต้องการหยุดระบบนานเกินไป

อัปเดต : OpenBSD เวอร์ชัน fdisk มีฟังก์ชันการทำงาน


1
ตามปกติแล้วคุณควรทำในสิ่งที่คุณขอโปรดอธิบายสาเหตุที่คุณต้องการ
rozcietrzewiacz

ฉันมีการสำรองข้อมูลไม่ต้องกังวล :)
Rufo El Magufo

ตกลงคุณได้รับการเตือนและต้องการเล่นดังนั้นที่นี่ไป ... :)
rozcietrzewiacz

คำตอบ:


17

FYI มันเป็นความคิดที่ไม่ดีและคุณสามารถสูญเสียทุกสิ่งทุกอย่าง หากคุณยังต้องการทำต่อไปนี้เป็นขั้นตอน:

  1. อย่าทำมัน หากวิธีนี้ไม่ช่วยให้:
  2. ใช้sfdiskเครื่องมือ: ขั้นแรกทำการสำรองข้อมูลของตารางพาร์ทิชันโดยใช้

    sfdisk -d /dev/sda > sda.out
    

    จากนั้นไปเลย:

    sfdisk /dev/sda -O sda-partition-sectors.save
    

    คุณจะเห็นอะไรเช่นนี้

    Checking that no-one is using this disk right now ...
    OK
    
    Disk /dev/sda: 1018 cylinders, 124 heads, 62 sectors/track
    Old situation:
    Units = cylinders of 3936256 bytes, blocks of 1024 bytes, counting from 0
    
       Device Boot Start     End   #cyls    #blocks   Id  System
    /dev/sda1          0+      5       6-     23063+  83  Linux
    /dev/sda2          6    1017    1012    3890128   83  Linux
    /dev/sda3          0       -       0          0    0  Empty
    /dev/sda4          0       -       0          0    0  Empty
    Input in the following format; absent fields get a default value.
    <start> <size> <type [E,S,L,X,hex]> <bootable [-,*]> <c,h,s> <c,h,s>
    Usually you only need to specify <start> and <size> (and perhaps <type>).
    
    /dev/sda1 :
    

ตอนนี้ก็ขอให้คุณให้รายละเอียดใหม่สำหรับพาร์ทิชัน 'sda1' ดังนั้นคุณต้องให้ตัวเลขของ sda2 ที่นี่ ดังนั้นฉันใส่ '6 1012' ที่นี่และกด Enter:

    /dev/sda1 :6 1012
    /dev/sda1          6    1017    1012    3890128   83  Linux
    /dev/sda2 :

ตอนนี้ตรวจสอบว่าหมายเลขที่พิมพ์หลังจากที่คุณกด Enter เหมือนกับที่พิมพ์ไว้ก่อนหน้านี้สำหรับ sda2 หรือไม่ หากไม่เป็นไรให้ดำเนินการต่อโดยระบุหมายเลขใหม่สำหรับ sda2:

    /dev/sda2 :0
    /dev/sda2          0+      5       6-     23063+  83  Linux
    /dev/sda3 :

คราวนี้มันก็เพียงพอแล้วที่จะใส่ "0" ในกรณีของฉัน - แต่คุณต้องแน่ใจว่าตัวเลขไม่ได้ทำให้คุณสับสน

ถัดไปดำเนินการกับพาร์ติชันอื่น ๆ ในลักษณะเดียวกัน หากคุณถึงจุดสิ้นสุดของดิสก์แล้วการกด Enter ก็เพียงพอแล้ว สุดท้ายตรวจสอบอีกครั้งว่าตัวเลขทั้งหมดถูกและบันทึกตารางพาร์ติชัน (หรือไม่) หากคุณทำอะไรผิดพลาดให้ดูที่man sfdiskและคำอธิบายของตัวเลือก '-d', '-O' และ '-I'

โปรดสังเกตว่าเมื่อคุณทำการเปลี่ยนแปลงที่บ้าคลั่งแล้วคุณอาจต้องเรียกใช้ 'ซิงค์' เพื่อให้พาร์ติชันอ่านซ้ำก่อนที่คุณจะลองเมานต์


ขอบคุณสำหรับคำตอบ. คุณพูดถูกนี่น่ากลัว :)
Rufo El Magufo

ชั่วร้ายอย่างน่าพิศวง จะเกิดอะไรขึ้นถ้าตัวเลขไม่เหมือนกัน ยอมแพ้และแบ่งกัน? (นั่นคือสิ่งที่ฉันทำ)
supervacuo

1
@supervacuo Testiskอาจช่วยคุณได้ ค้นหาtestdiskแพ็คเกจในฐานข้อมูลซอฟต์แวร์ของ distro ของคุณ
rozcietrzewiacz

@supervacuo หากตัวเลขไม่เหมือนกันพาร์ติชั่นใหม่ของคุณจะไม่อยู่ในตำแหน่งเดียวกับพาร์ติชั่นเก่าและคุณอาจเสียหายได้ หากคุณไม่ได้ทำอะไรกับดิสก์คุณสามารถคืนค่าตารางพาร์ติชันที่คุณหวังว่าจะสำรองข้อมูลไว้ก่อนที่จะเริ่มและลองอีกครั้ง ถ้าไม่เช่นนั้นคุณควรหวังว่าตัวเลขที่ถูกต้องจะยังอยู่ในคอนโซลของคุณอยู่หรือคุณสามารถจำขนาดและตำแหน่งที่แน่นอนของพาร์ติชันของคุณและคำนวณตัวเลขได้
Micheal Johnson

31

ฉันเพิ่งทำสิ่งนี้ในวิธีที่ง่ายขึ้น:

# sfdisk -d /dev/sdb > sdb.bkp

ทิ้งสำเนาไว้เพื่อความปลอดภัย

# cp sdb.bkp sdb.new 

ตอนนี้แก้ไข sdb.new การเปลี่ยนแปลงเฉพาะลำดับบรรทัดและหมายเลขพาร์ติชันเช่นเดียวกับในกรณีของฉัน:

จาก

# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=  1026048, size=975747120, Id=83
/dev/sdb2 : start=     2048, size=   204800, Id=83
/dev/sdb3 : start=   206848, size=   819200, Id= b
/dev/sdb4 : start=        0, size=        0, Id= 0

ถึง

# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=     2048, size=   204800, Id=83
/dev/sdb2 : start=   206848, size=   819200, Id= b
/dev/sdb3 : start=  1026048, size=975747120, Id=83
/dev/sdb4 : start=        0, size=        0, Id= 0

แล้วโยนกลับไปที่ตารางพาร์ทิชันดิสก์?

# sfdisk /dev/sdb < sdb.new

ลำดับการเรียงลำดับของฉันยุ่งเหยิงหลังจากที่ฉันลดขนาดและเลื่อนพาร์ทิชันเดียว (sdb1) เพื่อเพิ่มพาร์ติชันเล็ก ๆ สองพาร์ติชั่นที่จุดเริ่มต้นของดิสก์โดยใช้ gpartedเพื่อเพิ่มสองพาร์ทิชันที่มีขนาดเล็กในช่วงเริ่มต้นของดิสก์โดยใช้

หากคำสั่งสุดท้ายไม่ทำงานเช่นเดียวกับในกรณีของฉันให้เปลี่ยนเป็น:

# sfdisk --no-reread -f /dev/sdb < sdb.new

สิ่งนี้ใช้ได้สำหรับฉันและฉันไม่ต้องการคำสั่งที่ 2
Aaron Franke

สำหรับฉันเช่นกันขอบคุณ;) ... หมายเหตุตรวจสอบให้แน่ใจว่าพาร์ติชันของคุณทั้งหมดถูก
ถอนติดตั้ง

3

คุณจะต้องเขียนตารางพาร์ทิชันไดรฟ์ใหม่เพื่อกลับคำสั่งซึ่งเป็นความเสี่ยงเล็กน้อยที่จะทำ ถ้าฉันเป็นคุณฉันจะแก้ไขปัญหาที่ทำให้คุณต้องการสลับลำดับของชื่ออุปกรณ์และปล่อยให้พาร์ติชันอยู่คนเดียว

ตัวอย่างเช่นหากคุณมีสคริปต์ที่ต้องการเรียกใช้บนเครื่องทั้งสองและคุณต้องการให้เข้าถึงอุปกรณ์เดียวกันจากนั้นสร้างลิงค์ในไดเรกทอรีอื่น (ไม่ใช่ / dev) ซึ่งเป็นชื่อเดียวกันบนเซิร์ฟเวอร์ทั้งสอง แต่เชื่อมโยงไปยัง / dev / sda1 บนอันหนึ่งและ / dev / sda2 ที่อีกอันหนึ่ง

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


ฉันไม่สามารถเปลี่ยนแปลงอะไรได้ ระบบของฉันคือ Xen DomU และปัญหาอยู่ใน Dom0 ฉันสามารถสร้างลำดับของพาร์ติชันใหม่ได้ แต่มีความซับซ้อนมากขึ้นในสถานการณ์ของฉัน แต่อย่างไรก็ตามฉันต้องการทราบวิธีเปลี่ยนลำดับ
Rufo El Magufo

2

ก่อนอื่นสิ่งทั้งหมดนี้เป็นการออกกำลังกายในการพยายามทำให้ดีที่สุดเพื่อทำลายสิ่งต่าง ๆ แต่ต่อไปนี้เป็นอีกวิธีหนึ่งที่คุณสามารถลองได้

หมายเหตุ: คุณไม่ได้พูดถึงว่าคุณบูทจากที่ไหนและวิธีแก้ปัญหานี้และไม่มีใครในขณะที่ฉันกำลังเขียนสิ่งนี้กำลังพูดถึงสิ่งที่คุณต้องทำเพื่อให้ LILO หรือ GRUB ทำงานได้อย่างถูกต้อง

/dev/sda1และ/dev/sda2เป็นอุปกรณ์บล็อก (8,1) และ (8,2) คุณสามารถลองใช้mknodเพื่อสลับทั้งสองอย่าง

telinit 1
(...)
rm -f /dev/sda{1,2}; mknod /dev/sda1 b 8 2; mknod /dev/sda2 b 8 1
chmod 640 /dev/sda{1,2}; chown root:disk /dev/sda{1,2}
reboot

เพียงจำไว้ว่าการแลกเปลี่ยนนี้จะเกิดขึ้นเฉพาะหลังจากที่พาร์ทิชันของคุณที่มี/dev/การโหลดเมื่อบูตดังนั้นinitrdจะยังคงมีความ "ถูกต้อง" คนที่จนกว่าคุณจะแก้ไขมันมีมากเกินไป (การออกกำลังกายสำหรับผู้อ่าน - จะmkinitrd? คัดลอกไม่ชอบมาพากล) นี้ไม่ได้ ที่อยู่บริบทของ SELinux


bootloader ไม่ใช่ปัญหา :) ขอบคุณสำหรับการแก้ปัญหา แต่ฉันต้องการเปลี่ยนลำดับในตารางพาร์ติชันไม่ใช่ในระบบ
Rufo El Magufo

1
นั่นจะไม่ทำงานบนระบบใด ๆ ที่ใช้ udev และมันจะช่วยได้ก็ต่อเมื่อแอปพลิเคชันอ่านจากไฟล์ที่เรียกว่า/dev/sda(ตรงข้ามกับการอ่านดิสก์โดยตรง)
Gilles 'หยุดชั่วร้าย'

ทั้งสอง - ตกลง IMHO คำถามทั้งหมดคือการออกกำลังกายด้วยความเจ็บปวด ฉันไม่แน่ใจเกี่ยวกับudevสิ่งต่าง ๆ ; เห็นได้ชัดว่าระบบแรกที่ฉันsshเข้าไม่ได้มี
Aaron D. Marasco

2

ฉันเพิ่งค้นพบทางออกที่ง่ายอย่างน่าประหลาดใจสำหรับปัญหานี้ /dev/sda3สมมติว่าคุณมีเพียงหนึ่งพาร์ทิชันซ้ายชื่อ /dev/sda1คุณต้องการที่จะเรียกว่า เปิดgdiskแปลงตารางพาร์ติชันเป็น GPT เขียนและออก จากนั้นเปิดอีกครั้งกด sort (ซึ่งจะเปลี่ยนหมายเลข GPT เป็น 1) จากนั้นแปลง GPT กลับเป็น MBR ผ่านตัวเลือกผู้เชี่ยวชาญ


1

- การแก้ไขพาร์ติชั่น / dev / sda3 เป็น / dev / sda2 ใน terminal เป็น root -

  1. ตารางพาร์ติชั่นสำรอง

    sfdisk -d / dev / sda> sda.bkp

  2. คัดลอกข้อมูลสำรองตารางพาร์ติชันไปยังตารางพาร์ติชันใหม่

    cp sda.bkp sda.new

  3. แก้ไขตารางพาร์ติชันใหม่

    gedit sda.new

ป้อนคำอธิบายรูปภาพที่นี่

บันทึกปิด

  1. ติดตั้งตารางพาร์ติชันใหม่อีกครั้ง

    sfdisk - no-reread -f / dev / sda <sda.new

  2. รีบูทคอมพิวเตอร์


แม้ว่าสิ่งนี้จะทำได้ แต่ฉันขอแนะนำ
GPCD

1
ฉันคิดว่าคุณสามารถทำได้ดีกว่าสกรีนช็อตของโปรแกรมแก้ไขข้อความที่มีแบบอักษรที่ไม่ใช่แบบ monospace จุดแทรกที่มองเห็นได้และข้อผิดพลาดของเครื่องตรวจการสะกดที่มองเห็นได้
Micheal Johnson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.