मैं रिबूट (kpartx) के बिना नए fdisk टेबल का उपयोग कैसे करूं?


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

यह एक raspi चल रहे डेबियन में एसडी कार्ड के लिए है।

संपादित करें: स्पष्ट करने के लिए कि मैं क्या करने की कोशिश कर रहा हूं; मैं एक अप्रयुक्त p3 को SD कार्ड से हटा रहा हूं और कार्ड को भरने के लिए p2 का आकार बदल रहा हूं। कार्ड में वर्तमान में एक छोटा बूट पार्टीशन p1 है और P2 वह स्थान है जहाँ OS बैठता है।


वर्तमान में एसडी कार्ड उपयोग में है? (उदाहरण के लिए, यह एक उस पर फाइल सिस्टम घुड़सवार है?)
derobert

@derobert, हाँ यह करता है। इसमें 2 विभाजन हैं: एक छोटा बूट विभाजन और एक बड़ा मुख्य विभाजन जहां OS का अधिकांश भाग बैठता है। मैं सिर्फ कार्ड को भरने के लिए 2 डी विभाजन का विस्तार करने की कोशिश कर रहा हूं।
ऑक्टोपस

2
मुझे पूरा यकीन है कि इसका जवाब है-आप नहीं कर सकते। गिरी एक विभाजन तालिका को पुन: पढ़ने नहीं होगा जब तक उपकरण के उपयोग में नहीं है ...
derobert

जवाबों:


7

आप चाहते हैं partx -u, नहीं kpartx(जो डिवाइस-मैपर उपकरणों पर संचालित होता है)।


-uध्वज का उद्देश्य क्या है ?
इगोरगानापल्स्की

1
@IgorGanapolsky, डिस्क पर मिलान करने के लिए कर्नेल विभाजन तालिका को अद्यतन करने के लिए। एक त्वरित man partxने इसका उत्तर दिया होगा।
Psusi

@ ऑक्टोपस यह मेरे लिए किया था, जहां partprobe नहीं था। Partprobe तो उस त्रुटि के बिना वापस आ गया।
डंकन एक्स सिम्पसन

6

मेरा मानना ​​है कि @derobert (जिन्होंने मूल प्रश्न पर टिप्पणी की) सही होने की संभावना है। वर्तमान में उपयोग किए जा रहे विभाजन को हटाने के मामले में ऐसा लगता है कि रिबूट के अलावा और कोई विकल्प नहीं है।

यहां तक ​​कि जब मैं उपयोग करता हूं 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.

मैंने एक ही काम किया, अच्छी खबर यह है, कि मैं भाग लेने में असमर्थ था, पार्टप्रॉबी <डिवाइस>, और रिबूट किए बिना दोनों विभाजनों को हटा दें। दुर्भाग्य से यह सेवाओं को बंद करने के कारण डाउनटाइम की आवश्यकता थी।
रहली

3
parted/ के हाल के संस्करण partprobeइस तरह की त्रुटि नहीं देंगे और रिबूट के बिना माउंट किए गए विभाजन पर उपयोग किए जा सकते हैं।
Psusi

@psusi, मैं हाल ही के संस्करण का उपयोग कर रहा हूं, partedलेकिन मुझे अभी भी वही त्रुटि मिली है। समाधान डिवाइस partedपर चलने से पहले डिवाइस को अनमाउंट करना है , फिर आपको पुराने विभाजन के बजाय नए विभाजन का उपयोग करने के लिए कर्नेल को सूचित करने के लिए अपने सिस्टम को रिबूट करने की आवश्यकता नहीं है
MyWrathAcademia

1

मुझे यह समस्या हो रही थी क्योंकि मैं डिवाइस को अनमाउंट करना भूल गया था। एक के बाद:

sudo umount /dev/sdb

fdisk ने सही तरीके से काम किया।


1
मुझे अभी भी एक त्रुटि मिलती है: विभाजन तालिका को फिर से पढ़ने के लिए ioctl () को कॉल करना। विभाजन तालिका को फिर से पढ़ना विफल रहा। डिवाइस या संसाधन व्यस्त
इगोरगानपोलस्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.