ฉันจะใช้ตาราง fdisk ใหม่โดยไม่ต้องรีบูท (kpartx) ได้อย่างไร


11

เมื่อฉันเรียกใช้ fdisk และเปลี่ยนขนาดของพาร์ติชัน fdisk จะพูดที่ส่วนท้ายของเอาต์พุต:

The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8)

ฉันต้องการทำเช่นนั้นโดยไม่ต้องรีบูตเครื่อง (จากนั้นเขียนสคริปต์ที่ใช้งานได้) ฉันจะใช้kpartxเพื่อทำสิ่งนี้อย่างถูกต้องได้อย่างไร ฉันได้พยายาม:

kpartx -f -v /dev/mmcblk0

ผลลัพธ์ใด:

mmcblk0p1 : 0 102400 /dev/mmcblk0 2048
mmcblk0p2 : 0 7657472 /dev/mmcblk0 104448

และ:

kpartx -a -v /dev/mmcblk0

ผลลัพธ์ใด:

device-mapper: reload ioctl on mmcblk0p1 failed: Invalid argument
create/reload failed on mmcblk0p1
add map mmcblk0p1 (0:0): 0 102400 linear /dev/mmcblk0 2048
device-mapper: reload ioctl on mmcblk0p2 failed: Invalid argument
create/reload failed on mmcblk0p2
add map mmcblk0p2 (0:0): 0 7657472 linear /dev/mmcblk0 104448

นี่คือการ์ด SD ในเดเบียนที่กำลังรัน raspi

แก้ไข: เพื่อชี้แจงสิ่งที่ฉันพยายามทำ; ฉันกำลังลบ p3 ที่ไม่ได้ใช้จากการ์ด SD และปรับขนาด p2 เพื่อเติมการ์ด ในปัจจุบันการ์ดมีพาร์ทิชันสำหรับบูตขนาดเล็ก p1 และ p2 เป็นที่ที่ระบบปฏิบัติการตั้งอยู่


ปัจจุบันมีการใช้การ์ด SD หรือไม่ (เช่นมันมีระบบไฟล์ที่ติดตั้งอยู่หรือไม่?)
Derobert

@derobert ใช่มันเป็นเช่นนั้น มันมี 2 พาร์ติชั่น: พาร์ติชั่นสำหรับบูตขนาดเล็กและพาร์ติชั่นหลักที่ใหญ่กว่าซึ่งส่วนใหญ่ของระบบปฏิบัติการตั้งอยู่ ฉันแค่พยายามขยายพาร์ติชั่นที่ 2 เพื่อเติมการ์ด
Octopus

2
ฉันค่อนข้างแน่ใจว่านั่นคือคำตอบ - คุณทำไม่ได้ เคอร์เนลจะไม่อ่านตารางพาร์ติชันอีกครั้งเว้นแต่ว่าอุปกรณ์นั้นไม่ได้ใช้งาน ...
derobert

ไม่partprobeช่วยเหลือ?
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


7

คุณต้องการpartx -uไม่ใช่kpartx(ซึ่งทำงานกับอุปกรณ์ -mapper อุปกรณ์)


วัตถุประสงค์ของการ-uตั้งค่าสถานะคืออะไร?
IgorGanapolsky

1
@IgorGanapolsky เพื่ออัพเดตตารางพาร์ติชันเคอร์เนลเพื่อให้ตรงกับบนดิสก์หนึ่ง man partxจะมีคำตอบอย่างรวดเร็ว
psusi

@ Octopus มันทำเพื่อฉันโดยที่ partprobe ไม่ได้ จากนั้น Partprobe จะส่งคืนโดยไม่มีข้อผิดพลาดนั้น
Duncan X Simpson

6

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

แม้ว่าฉันจะใช้partprobe(ซึ่งได้มาด้วยapt-get install parted) ฉันก็จะได้ผลลัพธ์ต่อไปนี้:

Error: Partition(s) 2, 3 on /dev/mmcblk0 have been written, but we have 
been unable to inform the kernel of the change, probably because it/they 
are in use.  As a result, the old partition(s) will remain in use.  You 
should reboot now before making further changes.

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

3
เวอร์ชันล่าสุดของparted/ partprobeจะไม่ให้ข้อผิดพลาดดังกล่าวและสามารถใช้กับพาร์ติชันที่เมาท์ได้โดยไม่ต้องรีบูท
psusi

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

1

ฉันได้รับปัญหานี้เพราะฉันลืมยกเลิกการต่อเชื่อมอุปกรณ์ หลังจาก:

sudo umount /dev/sdb

fdisk ทำงานอย่างถูกต้อง


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