/ देव / sda की इन-मेमोरी (कर्नेल) विभाजन तालिका कैसे पढ़ें?


15

मैंने गलती से GParted ( AskUbuntu पर पूरी कहानी ) के साथ मेरे / dev / sda विभाजन तालिका को ओवरवोट कर दिया । चूंकि मैंने अभी तक रिबूट नहीं किया है और मेरा फाइल सिस्टम अभी भी पूरी तरह से उपयोग करने योग्य है, इसलिए मुझे बताया गया था कि मैं इन-कर्नेल मेमोरी से विभाजन तालिका को पुनर्प्राप्त करने में सक्षम हो सकता हूं। क्या यह संभव है? यदि हां, तो मैं इसे कैसे ठीक करूं और इसे पुनर्स्थापित करूं?

यहाँ छवि विवरण दर्ज करें

जवाबों:


26

हां, आप इसे /sysफाइलसिस्टम के साथ कर सकते हैं ।

/sysकर्नेल और कर्नेल ड्राइवरों द्वारा गतिशील रूप से उत्पन्न एक नकली फाइलसिस्टम है।
इस विशिष्ट मामले में आप जा सकते हैं /sys/block/sdaऔर आपको ड्राइव पर प्रत्येक विभाजन के लिए एक निर्देशिका दिखाई देगी। उन फ़ोल्डरों में 2 विशिष्ट फाइलें हैं जिनकी आपको आवश्यकता है, startऔर sizestartड्राइव की शुरुआत से ऑफसेट शामिल है, और sizeविभाजन का आकार है। बस विभाजनों को हटा दें और उन्हें ठीक उसी शुरुआत और आकारों के साथ फिर से बनाएं जैसा कि पाया गया है /sys

उदाहरण के लिए यह मेरी ड्राइव जैसा दिखता है:

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      133119       65536   83  Linux
/dev/sda2   *      133120   134340607    67103744    7  HPFS/NTFS/exFAT
/dev/sda3       134340608   974675967   420167680   8e  Linux LVM
/dev/sda4       974675968   976773167     1048600   82  Linux swap / Solaris

और यह मेरे पास है /sys/block/sda:

sda1/
 start: 2048
 size: 131072
sda2/
 start: 133120
 size: 134207488
sda3/
 start: 134340608
 size: 840335360
sda4/
 start: 974675968
 size: 2097200


मैंने यह जांचने के लिए परीक्षण किया है कि किसी रनिंग सिस्टम पर विभाजन तालिका को संशोधित करने के बाद जानकारी को सत्यापित करना सही है


1
कभी-कभी जब मैं एक प्रश्न को बढ़ाता हूं, तो इसका मतलब है "अरे यह आसान था"। आपका उत्थान "मेरी त्वचा को बचाने" जैसा है। धन्यवाद!
एलेक्स हिरजेल

मेरे पास नहीं है /dev/sdb/start। क्या इसका नाम बदल दिया गया है ext_range? कर्नेल:4.8.15-1-MANJARO
टॉम हेल

@ टोमाले इट्स /sys/block/sdb/start, नॉट/dev/sdb/start
पैट्रिक

क्षमा करें, मैंने गलत निर्देशिका उद्धृत की। मेरे पास statवहाँ है, लेकिन नहीं start
टॉम हेल

विभाजन को फिर से बनाते समय, मैं usind की अनुशंसा करता हूं fdiskक्योंकि यह सीधे सेक्टरों की संख्या दर्ज करने की अनुमति देता है और आप डिस्क पर लिखने से पहले मानों की जांच कर सकते हैं। मैंने सफलतापूर्वक एक डिस्क को फिर से स्थापित किया: पहला विभाजन बनाना, स्वीकार किया जाना, फिर अंत में "+ आकार" (ऊपर से) दर्ज करना, दूसरा विभाजन start/ sys से प्रवेश करना ... और "+ आकार" फिर से और इतने पर ... जांचना नई तालिका लिखने से पहले विभाजन का आकार। सौभाग्य!
जोर्ग गोत्स्चलिच

11

मैंने इस समस्या को हल करने में मदद करने के लिए कोई स्क्रिप्ट नहीं बनाई, NO WARRANTY के साथ । (लेकिन मैंने अपनी वर्चुअल मशीन पर परीक्षण किया)

निम्नलिखित पैरामीटर के साथ, पहले पैरामीटर पर, क्षतिग्रस्त HD के साथ चल रहा है:

user@host:~$ ./repart.sh sda

की सामग्री repart.sh:

#!/bin/bash

echo "unit: sectors" 
for i in /sys/block/$1/$1?/; do
    printf '/dev/%s : start=%d, size=%d, type=XX\n' "$(basename $i)" "$(<$i/start)" "$(<$i/size)"
done

आउटपुट एक sfdisk प्रारूप है। लेकिन सावधानी से , इस फ़ाइल का उपयोग करने के लिए संशोधित किया जाना है। विस्तारित विभाजन प्रकार = 5 पर, आकार को बढ़ाएं, विस्तारित और पहले तार्किक विभाजन की शुरुआत के बीच सभी तार्किक स्थान प्लस स्पेस का उपयोग करें।

unit: sectors
/dev/sda1 : start=63, size=2040192, type=XX
/dev/sda2 : start=2040255, size=20482875, type=XX
/dev/sda3 : start=22523130, size=19197675, type=XX
/dev/sda4 : start=41720805, size=2, type=XX
/dev/sda5 : start=41720868, size=208782, type=XX

आपको XX प्रकार से विभाजन की संख्या तक के प्रकार को बदलना होगा । बूट करने योग्य विभाजन को पहली पंक्ति में रखें।

unit: sectors
/dev/sda1 : start=63, size=2040192, type=83, bootable
/dev/sda2 : start=2040255, size=20482875, type=83
/dev/sda3 : start=22523130, size=19197675, type=fd
/dev/sda4 : start=41720805, size=208845, type=5
/dev/sda5 : start=41720868, size=208782, type=82

यह परिवर्तन लागू करें

cat repart.sfdisk | sfdisk -f /dev/sda

विभाजन तालिकाएँ फिर से बनाएँ

partprobe 
/sbin/blockdev --rereadpt

ग्रब को पुनर्स्थापित करें

grub-install /dev/sda

1
सुनिश्चित करें कि sfdisk के लिए "-u B" स्विच का उपयोग करें और सावधान रहें, आपको repart.sfdisk (उन्हें आमतौर पर दो से विभाजित करें) में मानों को समायोजित करना पड़ सकता है, अगर sfdisk ब्लॉकों के आकार में गिना जाता है (यूनिटों की जाँच करें) = ब्लॉक 1024 बाइट्स "512 सूट्स (आमतौर पर आजकल 1024) के अलावा अन्य" सुडो sfdisk -u B -l / dev / sda ") में।
फ्लोरियन

1
मैं पहले से गलत करता हूं: Id = 5 से आपका मतलब है विभाजन प्रकार 5, जो sda4 है, sda5 नहीं। इसके अलावा, मेरे मामले में ls -d / sys / block / sda / sda * मुझे केवल sda1 और sda5 देता है, इसलिए ऐसा लगता है कि कंटेनर गायब है।
वा --ू at

आपको ls को पार्स नहीं करना चाहिए; इसके बजाय का उपयोग करें
बिल्ली

4

क्या आपने टेस्टडिस्क की कोशिश की है ? आपके द्वारा रिबूट किए जाने के बाद भी यह डिस्क को स्कैन कर सकता है और खोई हुई विभाजन सारणी को पुनर्प्राप्त कर सकता है।

यह डेबियन के लिए पूर्व-पैक उपलब्ध है और संभवतः उबंटू के लिए भी उपलब्ध है। संभवतः अन्य डिस्ट्रोस।

यदि आप एक gparted CD को बूट कर रहे हैं, तो यह देखने लायक है कि क्या यह उस पर पहले से इंस्टॉल है।


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