रिबूट किए बिना विभाजन तालिका फिर से बनाएं?


71

कभी-कभी, जब आकार बदलने या अन्यथा डिस्क पर विभाजन के बारे में mucking होता है, तो cfdisk कहेगा:

Wrote partition table, but re-read table failed. Reboot to update table.

(यह भी अन्य विभाजन उपकरणों के साथ होता है, इसलिए मैं सोच रहा हूं कि यह cfdisk समस्या के बजाय एक लिनक्स मुद्दा है।) यह क्यों होता है , और यह केवल कभी-कभी ही क्यों होता है , और मैं इससे बचने के लिए क्या कर सकता हूं?

नोट: कृपया मान लें कि मेरे द्वारा संपादित किए जा रहे किसी भी विभाजन को खोला, माउंट या अन्यथा उपयोग में नहीं लिया गया है।


अपडेट करें:

cfdisk ioctl(fd, BLKRRPART, NULL)लिनक्स को विभाजन तालिका को फिर से पढ़ने के लिए बताने के लिए उपयोग करता है। अन्य उपकरणों के दो अब तक की सिफारिश की ( hdparm -z DEVICE, sfdisk -R DEVICE) बिल्कुल वही बात करता है। partprobe DEVICEआदेश, दूसरे हाथ पर, एक नया ioctl BLKPG कहा जाता है, जो बेहतर हो सकता है का उपयोग करने लगता है; मुझे नहीं पता। (अगर BLKPG विफल हो जाता है तो यह BLKRRPART पर भी वापस आ जाता है।)

लगता है कि BLKPG एक "यह विभाजन बदल गया है; यहां नया आकार है" ऑपरेशन, और यह ऐसा लगता था जैसे partprobeकि यह डिवाइस पर दिए गए सभी विभाजनों पर व्यक्तिगत रूप से कहा जाता है, इसलिए यह काम करना चाहिए यदि व्यक्तिगत विभाजन अप्रयुक्त हैं। हालाँकि, मुझे इसे आज़माने का अवसर नहीं मिला।


1
man sfdiskकहते हैं:Since version 2.26 sfdisk no longer provides the -R or --re-read option to force the kernel to reread the partition table. Use blockdev --rereadpt instead.
टॉम हेल

जवाबों:


66

IMHO सबसे विश्वसनीय / सबसे अच्छा जवाब है

partprobe /dev/sdX

1
मैंने उबंटू सर्वर के तहत एक देव का विस्तार किया, यह देव एक हार्डवेयर छापा है। रेडकंट्रोलर का उपयोग करके अंतर्निहित छापे का विस्तार करने के बाद, मैंने फ़ाइल सिस्टम को विघटित किया और "पार्टप्रॉबे / देव / एसडीए" की कोशिश की - यह काम नहीं किया। "fdisk -l" ने अभी भी पुराने आकार को दिखाया। मैंने फिर "hdparm -z / dev / sda" चलाया और यह चाल चली। मैं तब कोई रिबूट के साथ अपने फाइल सिस्टम को माउंट और आकार दे सकता था। मुझे पता है कि मैं वास्तव में YMMV के अलावा कुछ नहीं जोड़ रहा हूँ।
मुवान्नो

मैं सेंटोस 6.5 पर हूं; कर्नेल २.६.३२ निम्नलिखित सभी आदेशों ने कर्नेल रिडर विभाजन नहीं बनाया: - partprobe / dev / sda (वारनिकग: कर्नेल फिर से पढ़ना विफल रहा)
अधिकतम

@ मोम, मैंने यह भी देखा है कि कभी-कभी पार्टप्रॉब एक ​​त्रुटि को भी प्रिंट करता है जो काम नहीं करता था। कभी-कभी एक रिबूट निश्चित होने का एकमात्र विकल्प होता है। हालांकि कई बार यह मेरे लिए काम करने लगता है।
मैट

यह मेरे लिए काम नहीं करता था क्योंकि कुछ निर्देशिकाएं अभी भी --bind के साथ मुहिम चला रही थीं। यह विभाजन पहले से ही असम्बद्ध था लेकिन उस विभाजन की ओर संकेत करने वाले बाइंड-माउंट अभी भी थे। अजीब कि umount ने काम किया और partprobe नहीं, लेकिन bind-mounts को umounting करने के बाद, मैं डिस्क को भी partprobe कर सकता था।
एथन लरॉय

यह मेरे लिए CentOS 6 पर चारों ओर kpartxऔर udevadm trigger10 मिनट के लिए ध्वजांकित करने के बाद काम किया । धन्यवाद!
माइक एंड्रयूज

19

विभाजन तालिका जानकारी का पुन: उपयोग हमेशा काम नहीं करता है, लेकिन प्रयास करें

hdparm -z /dev/sda

या

sfdisk -R /dev/sda

यदि यह काम करता है / खरीद / विभाजन में मान बदल जाएगा।


hdparm ने मेरे लिए काम किया।
प्रो। फालकेन

3
sfdisk -R विकल्प मौजूद नहीं है।
मैट

यह ध्यान दिया जाना चाहिए कि hdparmकमांड केवल तभी काम करेगा जब विभाजन माउंट नहीं हैं।

... वास्तव में, ऐसा लग रहा है कि उपयोग sfdisk -R-लिनेक्स 2.24.2 और 2.26.1 के बीच कहीं हटा दिया गया था
चार्ल्स डफी

1
man sfdiskकहते हैं:Since version 2.26 sfdisk no longer provides the -R or --re-read option to force the kernel to reread the partition table. Use blockdev --rereadpt instead.
टॉम हेल

10

Centos7 पर:

Https://access.redhat.com/solutions/199573 के अनुसार

तुम्हें कोशिश करनी चाहिए :

partx -u <partition>

इसने मेरे लिए काम किया।


1
मेरे लिए यही एक काम था। शेयर करने के लिए बहुत - बहुत शुक्रिया!! आप के लिए दिन के शीर्ष, सर!
NotGaeL

8

नोट: कृपया मान लें कि मेरे द्वारा संपादित किए जा रहे किसी भी विभाजन को खोला, माउंट या अन्यथा उपयोग में नहीं लिया गया है।

उस धारणा को देखते हुए, विभाजन तालिका को सफलतापूर्वक बचाया जा सकता है, और समस्या उत्पन्न नहीं होगी। आपको लगता है कि त्रुटि हो रही है तो यह इसलिए क्योंकि विभाजन तालिका है है वर्तमान में उपयोग में है, और इसलिए नहीं विसंगतियों बनाए बिना फिर से स्कैन किया जा सकता।


कुछ विभाजन उपयोग में हो सकते हैं, लेकिन उनमें से कोई भी ऐसा नहीं है जिसे मैं वास्तव में बदल रहा हूं, हालांकि वे एक ही विभाजन तालिका में हो सकते हैं।
टेडी

8
कर्नेल वह स्मार्ट नहीं है। यदि तालिका का कोई भी विभाजन उपयोग में है, तो कर्नेल rescan नहीं करता है। दूसरी दिशा में गलत हो जाना विनाशकारी हो सकता है, इसलिए यह सुरक्षित है। यदि आप इच्छानुसार विभाजन के साथ सामान बनाना चाहते हैं, तो LVM का उपयोग करें।
Womble

6

यह विभाजन पर आधारित नहीं है जिसे आप संपादित कर रहे हैं।

मान लीजिए कि आपके पास केवल एक हार्डडिस्क ( /dev/sda) और दो विभाजन ( /dev/sda1, /dev/sda2) हैं और आपने केवल एक विभाजन को माउंट किया है ( /dev/sda1)। यदि आप अन्य विभाजन के बारे में कुछ भी हटाते हैं या बदलते हैं जो कि माउंट भी नहीं है ( /dev/sda2) तो आपको वह त्रुटि मिलेगी जो विभाजन तालिका के पुन: पढ़ने में विफल रही है और कर्नेल पुरानी तालिका का उपयोग करेगा।

लेकिन अगर आपके पास दो हार्डडिस्क ( /dev/sda, /dev/sdb) हैं और इनमें से कोई भी विभाजन ( /dev/sdb) उपयोग में नहीं है। तब आप विभाजन को जोड़ / हटा / बदल / संपादित कर सकते हैं /dev/sdbऔर उन्हें बिना किसी समस्या के फिर से पढ़ा जा सकेगा। लेकिन भले ही बदलाव के दौरान / dev / sdb का एक विभाजन माउंट किया गया हो। फिर कर्नेल पुरानी तालिका का उपयोग करता रहेगा।


5

मैंने (मूल प्रश्नकर्ता) कुछ दिनों पहले एक स्थिति थी जब अन्य उत्तरों में से कोई भी (सहित partprobe /dev/sdX, वर्तमान में स्वीकृत और उच्चतम मत वाले उत्तर में) काम नहीं किया। हालाँकि, यह क्या था :

blockdev --rereadpt /dev/sdX

(मुझे नहीं पता कि यह क्यों काम किया और दूसरों ने नहीं किया, लेकिन मुझे खुशी है कि इसने काम किया, क्योंकि इसने मुझे एक व्यस्त सर्वर पर रिबूट बचाया।)


5

मैं सेंटोस 6.5 x 64 पर हूं; कर्नेल 2.6.32। और मैं आकार बदलने के लिए fdisk चाल का परीक्षण कर रहा हूँ।

/dev/sda1 /boot
/dev/sda2 /

निम्नलिखित सभी आदेशों ने कर्नेल को फिर से विभाजित नहीं किया :

  • partprobe / देव / sda (चेतावनी: गिरी फिर से करने में विफल ...।)
  • hdparm -z / dev / sda (BLKRRPART विफल: डिवाइस या संसाधन व्यस्त)
  • ब्लॉकदेव -रेडिएट / देव / sda (BLKRRPART विफल: डिवाइस या संसाधन व्यस्त)
  • sfdisk -R / dev / sda (BLKRRPART विफल: डिवाइस या संसाधन व्यस्त)

मैं अभी भी यह काम करने के लिए एक रिबूट की जरूरत है


मेरे लिए कोई भी काम नहीं किया (प्रॉक्समॉक्स वीएम, सेंटोस 7, एक्सएफएस विभाजन, कोई एलवीएम)। @uus जवाब ने काम किया, हालांकि: serverfault.com/a/722386/102252
NotGaeL

उपरोक्त सभी कमांड मेरे लिए भी काम नहीं करते थे।
फदी असबीह

मुझे लगता है कि कर्नेल 2.6.32 में समस्या है, मैंने पहले इनका उपयोग अन्य मशीनों पर किया था, यह ठीक काम किया, यहां तक ​​कि पुराने विभाजन के बीच उच्च संख्या के साथ विभाजन जोड़ने पर भी। यानी sdb1 sdb2 sdb3 - sdb2 हटाएं, फिर sdb1 sdb4 sdb5 sdb3। उपरोक्त के अलावा, partx, kpartx, blockdev ने भी काम नहीं किया।
sdkks

मुझे नहीं लगता कि यह असामान्य है कि यदि एक आदेश विभाजन को पुन: उत्पन्न करने में विफल रहता है, तो सभी विफल होते हैं - इसके लिए कुछ कारणों को खत्म करने के लिए मेरा जवाब भी देखें
मैक्सशेल्पीजिग

3

सभी माउंट अंक के साथ, योक्टो 2.4 चल रहा है:

partprobe /dev/sda 

डिवाइस पर विभाजन हटाए जाने के बाद भी विभाजन तालिका को फिर से लोड करने में विफल रहा। यह भी कोशिश की - और असफल रहे थे:

udevadm trigger --subsystem-match=block; udevadm settle
hdparm -z /dev/sda
blockdev --rereadpt /dev/sda

सभी समान रिपोर्ट किया गया "BLKRRPART विफल: डिवाइस या संसाधन व्यस्त ..." त्रुटियों ने मुझे रीबूट करने का निर्देश दिया। क्या पहले से काम करने के तरीकों की विफलता संभवतः इस तथ्य के कारण है कि udv अब सिस्टमड नियंत्रण में है? उन पंक्तियों के साथ सोचकर मैंने कोशिश की:

systemctl restart systemd-udevd.service

और अचानक रिबूट के बिना मेरी डिस्क फिर से उपलब्ध है !


शीर्ष स्वीकृत उत्तर अपूर्ण है: आधुनिक systemdदुनिया में, THIS सही उत्तर है। कृपया ध्यान दें कि आपको उनमें से किसी एक (या दोनों) systemd-udev-settleऔर को पुनः आरंभ करने की आवश्यकता है systemd-udev-triggersystemd-udevdकैंप की तरह ही फिर से शुरू करना मेरे लिए काफी नहीं था। लेकिन फिर से शुरू करने से अन्य दो ने भी चाल चली!
कॉस्टिन गुआ

1

जब जैसे कोई कमांड के साथ blockdev --rereadpt /dev/sdXविफल हो जाता है

blockdev: ioctl error on BLKRRPART: Device or resource busy

इसका आमतौर पर मतलब है कि कुछ (पुराना) विभाजन वास्तव में अभी भी किसी तरह कर्नेल द्वारा उपयोग किया जाता है।

संभावित कारण / सुधार:

  1. एक sdX विभाजन - कहते हैं sdX1- अभी भी मुहिम शुरू की है - साथ की जाँच करें mountऔर इसे umount करें
  2. /dev/sdX1एक सॉफ्टवेयर छापे का हिस्सा है - चेक करें cat /proc/mdstatऔर संभवतः संबंधित सरणियों को रोकें, जैसेmdadm --stop /dev/md126
  3. /dev/sdX1LVM भौतिक आयतन का एक हिस्सा है - pvdisplay/ के साथ जाँच करें vgdisplayऔर संभवतः साथ निष्क्रिय करेंvgchange
  4. /dev/sdX1जैसे के माध्यम से - कुछ उपकरण मानचित्रण का हिस्सा है cryptsetupकी जाँच - /dev/mapperऔर lsblk(उदाहरण के लिए और संभवतः मैपिंग निकालने cryptsetup luksClose)
  5. कुछ udv जांच के साथ दौड़ की स्थिति - साथ चलने वाली प्रक्रियाओं की जांच करें psऔर संभवतः एक को मार दें

एक उपकरण है - कहते हैं blockdev --rereadptकी तरह आम तौर पर इसी तरह के (विफल रहता है partx -uv, kpartx, partprobe, kpartprobe) एक समान तरीके से असफल जब तक मूल कारण निकाल दिया जाता है।


0

आप भी आजमा सकते हैं:

echo 1 > /sys/block/sdX/device/rescan

(लेकिन काम नहीं करेगा, नीचे टिप्पणी देखें)


3
यह विभाजन तालिका को फिर से विभाजित नहीं करता है। यह सिर्फ ज्यामिति की जानकारी, कैश मोड आदि को अपडेट करता है, SCSI IDENTIFY_DRIVE जारी किया जा रहा है।
दिमित्री चुबारोव

0

kpartx -a <partition> नव निर्मित विभाजन पर दो बार चलाया जा सकता है .... सिस्टम को रिबूट करने के बजाय।


2
दो बार? क्या आप भी दौड़ते हैं sync; sync; sync? ☺ मुझे अंधविश्वास की बू आती है ...
टेड्डी

1
मुझे लगता है कि यह अंधविश्वास इस तथ्य से आया है कि आप जांचते हैं कि क्या आपका सिंक, दूसरा सिंक करके। सिवाय इसके कि दूसरा एक ऑपरेटर के लिए केवल मूल्यवान है, इसकी पुष्टि करने के लिए तुरंत संकेत देता है, इस प्रकार उम्मीद के मुताबिक पूरा हुआ पहला सिंक। कुछ ब्लॉग और ट्यूटोरियल बाद में, और ....
जेएम बेकर 13

0

याद रखें कि udv सेवा चल रही है। यह विशेष रूप से तब उपयोगी होता है जब partprobe, hdparm, blockdev, और विभिन्न अन्य कमांड्स को कोई फर्क नहीं पड़ता है कि डिवाइस फाइल / dev / निर्देशिका में क्या उपलब्ध हैं।


0

मुझे न तो के लिए partprobeया blockdevसमाधान काम किया। हालांकि, यह एक काम करता है:

udevadm settle --exit-if-exists=/dev/sdb1

-3

यदि आप 'man oracleasm-scandisks' के लिए मेन्यू पढ़ते हैं, तो आप नीचे दिए गए पाठ को नोट करेंगे। oracleasm सभी स्कैनिंग के स्रोत के रूप में / proc / विभाजन का उपयोग कर रहा है। स्कैंडिस्क करने से पहले आपको अपने कच्चे उपकरणों को / proc / विभाजन में सूचीबद्ध करना होगा। आप / etc / sysconfig / oracleasm में आपके द्वारा स्कैन किए गए Scanorder और Scanexclude पैरामीटर, / proc / विभाजन (!!!!) में पाए गए नामों से संबंधित हैं।

---------- मनुष्य ऑरलियसम-स्कैंडिस्क ------ ...

स्कैन स्कैन कैसे करें स्कैन चार मूल चरणों में होता है।

   First, the list of disks to scan is created. If disks were specified on the command line, this is the list.
   If not, /proc/partitions is read, and each block device is added, subject to the -o and -x options.

   Second, the partition tables of each disk in the scan are reloaded unless the -s option was specified. Any
   disks that no longer exist are dropped.

   Third, the list of disks is recreated based on the new partition tables.

   Finally, each disk in the list is checked to see if it is marked for ASM use. Disks that are marked are
   instantiated.

2
... वह का उपयोग करने के बारे में कुछ भी नहीं उल्लेख किया हैoracleasm-scandisks
voretaq7
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.