प्रोग्रामेटिक रूप से पार्टीशन डिस्क


10

मैं एक बैश स्क्रिप्ट बनाने का प्रयास कर रहा हूं जो मौजूदा विभाजन (ओं) के साथ एक डिस्क पर एक फ़ाइल सिस्टम के साथ एक नया विभाजन बनाएगा।

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

मैं विशेष स्थिति / आकार में विभाजन वाले डिस्क पर निर्भर नहीं रहना चाहता। यही है, मैं पिछले मौजूदा एक के तुरंत बाद एक नया विभाजन बनाना चाहता हूं। मैं तब एक निश्चित आकार के विभाजन को बनाना या शेष स्थान को भरने में सक्षम होना चाहता हूं।

बैश में, क्या निर्धारित करने का एक विश्वसनीय तरीका है

क) अंतिम विभाजन की अंतिम स्थिति, और
ख) अंतिम विभाजन के बाद शेष अपरिवर्तित स्थान?


1
अगर तुम यह कर सकते हो, तो भी मैं नहीं करूंगा। कल्पना कीजिए कि टाइपो को किस तरह का नुकसान हो सकता है ...
जोसेफ आर।

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

मैं मानता हूं कि यह खतरनाक है। हालाँकि यह एक स्क्रिप्ट है जो डिस्क पर सभी विभाजनों को मिटाकर शुरू होगी, इसलिए बाद में विभाजन को गड़बड़ाना कोई बड़ी बात नहीं है। एकमात्र जोखिम यह है कि उपयोगकर्ता गलत डिस्क को निर्दिष्ट करता है, जो कि किसी भी विभाजन टूल के साथ आसान है।
एलेक्स

जवाबों:


4

partedमुक्त स्थान मुद्रित कर सकते हैं। उदाहरण (मैंने उद्देश्य पर एक जटिल चुना):

# parted /dev/sda unit s print free
[...]
Number  Start      End        Size       Type      File system  Flags
        63s        2047s      1985s                Free Space
 1      2048s      4196351s   4194304s   primary   fat32        lba
        4196352s   4198399s   2048s                Free Space
 2      4198400s   6295551s   2097152s   primary   ext2         boot
        6295552s   6297599s   2048s                Free Space
 3      6297600s   27269119s  20971520s  primary   ext2
        27269120s  27271167s  2048s                Free Space
 4      27271168s  31115263s  3844096s   extended               lba
 5      27273216s  29192191s  1918976s   logical   ext2
 6      29194240s  31115263s  1921024s   logical   ext2
        31115264s  31116287s  1024s                Free Space

जैसा कि आप देख सकते हैं कि यह आपको सीधे विभाजन की स्थिति और आकार प्रदान करता है जिसे आप बनाने में सक्षम हो सकते हैं, अर्थात बहुत अंतिम पंक्ति जो कहती है Free Space। आप एक विभाजन बना सकते हैं जो 31115264 पर शुरू होता है और 31116287 पर समाप्त होता है।

यदि यह नुकसान के लिए नहीं था कि विस्तारित विभाजन पर्याप्त बड़ा नहीं है!

लेकिन शायद आप पहले से ही जीपीटी का उपयोग करते हैं जहां आप ऐसी जटिलताओं से पीड़ित नहीं हैं।

संख्याओं को हथियाना काफी आसान होना चाहिए।

function make_partition
{
    parted -s "$1" unit s mkpart primary "$2" "$3"
}

make_partition /dev/sda `parted /dev/sda unit s print free | grep 'Free Space' | tail -n 1`

या ऐसा ही कुछ। (स्वाभाविक रूप से आप यहां कुछ और पवित्रता जांच करना चाहेंगे।)

@swisscheese ने दूसरे उत्तर में एक अच्छी टिप्पणी की, मुझे पता नहीं था कि partedपार्स फ्रेंडली आउटपुट की पेशकश की गई थी । आप इसके बजाय इसका उपयोग करने का विकल्प चुन सकते हैं। अंतिम सबसे बड़ा मुफ्त हथियाने के लिए उदाहरण:

# parted -m /dev/sda unit s print free | grep 'free;' | sort -t : -k 4n -k 2n | tail -n 1
1:27269120s:27271167s:2048s:free;

चाहे वह आपकी स्थिति के लिए लागू हो (मेरे उदाहरण में, आप वहां कोई विभाजन नहीं बना सकते हैं, यह पहले से ही पूर्ण है) कुछ ऐसा है जिसे आपको अपने बारे में जानना है। :)


धन्यवाद! संदर्भ के लिए, मैंने आपके मेक_पार्टिशन फंक्शन का इस्तेमाल किया, लेकिन थोड़े अलग तर्कों के साथ: मेक_पार्टिशन $ डिस्कparted -m $disk unit s print free | grep "free;" | tail -n 1 | awk -F':' '{print $2 " " $3}'
एलेक्स

-1

यह आसान है, mkpartedएक है --listविकल्प, आप का उपयोग करने की आवश्यकता है awk और --listपिछले विभाजन को पुनः प्राप्त करने और उसके बाद का उपयोग mkpart part-type [fs-type] start end,

लेकिन आपका जवाब:

सबसे पहले आपको विभाजन के सभी और साथ मिलना चाहिए:

mystartgroup=`parted --list |awk {'print $2'}`
myendgroup=`parted --list |awk {'print $3'}`

टिप्पणियाँ:

  1. आप परिवर्तित करना चाहिए GBकरने के लिए MG
  2. आपको प्रत्येक के अंतिम मूल्य का उपयोग करना चाहिए variable
  3. आपको -sअपने parted commandअंतिम स्क्रिप्ट में उपयोग करना चाहिए ।

अगर मेरे पास समय है, तो इस स्क्रिप्ट को समय के लिए क्षमा करें।


नमस्ते, क्या आपने वास्तव में आपके द्वारा सुझाए गए कमांड अनुक्रम चलाए हैं? मुझे नहीं लगता कि वे वह करते हैं जो आप उनसे करने की उम्मीद करते हैं: :(
swisscheese

मैं अद्यतन, कृपया फिर से पढ़ना।
फारसगुल्फ

विकल्प 2 को भी बदल दिया गया।
फारसगुल्फ

2
नमस्ते, मेरा क्या मतलब था - 'जुदा - सूची | awk' {प्रिंट $ 2} 'बस आँख बंद करके जागने के लिए पाइपिंग है! यह वह नहीं है जो आप चाहते हैं। आपको पक्षपाती विकल्प का उपयोग करना चाहिए, जो "पार्स-फ्रेंडली" आउटपुट प्रदान करता है।
स्वेच्छा से

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