पार्टप्रॉबी कैसे काम करता है?


12

मैं एससीआई बस (या उस मामले के लिए किसी भी अन्य बस) को ताज़ा करने के लिए एक रास्ता तलाश रहा था, जो मेरी कर्नेल (सेंटोस 5.5 पर 2.6.18-194-el5) को एक ड्राइव पर विभाजन के बारे में जानने के लिए अनुमति देगा, और मैं कर सकता था 'कोई रास्ता मत ढूंढो। partprobe यह तुरन्त किया। कैसे?

चूंकि यह महत्वपूर्ण है, यहाँ मैं क्या कर रहा था:

मैं विभाजन-विशिष्ट चीजों में कुछ अभ्यास करना चाहता था जैसे आकार बदलना, एमबीआर का बैकअप लेना और इसे पुनर्स्थापित करना, और इसी तरह। मैंने MBR का बैकअप / dev / sdb पर 20GB का विभाजन बनाया था:

dd if = / dev / sdb of = sdb.mbr bs = 512 count = 1

तब मैं fdisk में चला गया, विभाजन को हटा दिया, इसे लिखा और बाहर निकल गया।

ls / देव / sdb *

दिखाया कि कोई विभाजन नहीं था, और

fdisk -l / dev / sdb '

मिलान किया, इसलिए मुझे लगा कि मैं अच्छा था।

मैंने तब dd को उलट दिया:

dd if = sdb.mbr of = / dev / sdb bs = 512 count = 1

बेशक, मैंने उस समय कुछ नहीं किया, इसलिए

ls / देव / sdb *

किसी भी विभाजन को सूचीबद्ध नहीं किया, लेकिन

fdisk -l

बंटवारा दिखाया, संभवतः क्योंकि यह डिस्क पर पहले 512 बाइट्स को पढ़ता है और कर्नेल पर भरोसा नहीं करता है। मुझे पता था कि मुझे बस को रिफ्रेश करना होगा, इसलिए मैं / sys / class / scsi_host / host1 में गया, और किया

इको "- - -"> स्कैन

और कर रहा है

ls / देव / sdb

कुछ नया नहीं दिखाया, तो मैं / sys / बस / scsi / उपकरणों के लिए गया और प्रत्येक सूचीबद्ध उपकरणों के लिए, मैंने किया

इको 1> रेस्कैन

और वह काम नहीं किया।

मैंने तब समस्या पर अधिक शोध किया, और 'partprobe' के साथ आया, जो कि parted के साथ आता है। मैंने इसे चलाया, और इसने तुरंत काम किया।

अगर मुझे यहां कोई संभावित उत्तर नहीं मिलता है, तो मैं शायद केवल स्रोत प्राप्त करने जा रहा हूं और इसे देखूंगा, लेकिन मुझे लगता है कि यहां मेरे से परे जादूगर हैं, इसलिए मैंने सोचा कि मैं आप सभी से अपील करूंगा।

जवाबों:


12

पार्टप्रॉब उस BLKRRPARTioctl को कॉल करता है , जिसे दस्तावेज में, गलत तरीके include/linux/fs.hसे और उसके परे कर्नेल स्रोत (मांस में rescan_partitions()):

#define BLKRRPART  _IO(0x12,95) /* re-read partition table */

इसका पता लगाने का सबसे आसान तरीका रनिंग है strace -e raw=ioctl -e open,ioctl partprobe /dev/sdb

मुझे लगता है कि आपने /sys/*/*scanकर्नेल को यह बताने की कोशिश की थी कि क्या ड्राइव में बदलाव हुआ है। अगर ड्राइव नहीं बदली है (या कर्नेल का पता नहीं लगा है?) तो यह मदद नहीं करता है; लेकिन उस पर विभाजन संरचना बदल गई है।

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