/ Dev / sda'nın bellek içi (çekirdek) bölüm tablosunu nasıl okuyabilirim?


Yanıtlar:


26

Evet, bunu /sysdosya sistemiyle yapabilirsiniz.

/sysçekirdek ve çekirdek sürücüleri tarafından dinamik olarak oluşturulan sahte bir dosya sistemidir.
Bu özel durumda /sys/block/sda, sürücüdeki her bölüm için bir dizin göreceksiniz. Bu klasörlerde ihtiyacınız olan 2 belirli dosya vardır startve size. startsürücünün başlangıcından uzaklığı sizeiçerir ve bölümün boyutudur. Bölümleri silin ve tam olarak aynı başlangıç ​​ve boyutlarda yeniden oluşturun /sys.

Örneğin, sürücüm böyle görünüyor:

   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

Ve bende bu var /sys/block/sda:

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


Çalışan bir sistemdeki bölüm tablosunu değiştirdikten sonra bilgilerin doğru olduğunu doğrulamak için bunu test ettim


1
Bazen bir soruyu onayladığımda, "hey bu kullanışlıydı" anlamına gelir. Sizin oyunuz daha çok "bu cildimi kurtardı" gibi. Teşekkürler!
Alex Hirzel

Benim yok /dev/sdb/start. Yeniden adlandırıldı mı ext_range? Çekirdek:4.8.15-1-MANJARO
Tom Hale

@TomHale değil /sys/block/sdb/start, değil/dev/sdb/start
Patrick

Maalesef yanlış dizinden alıntı yaptım. statOrada bir tane var, ama hayır start.
Tom Hale

Bölümleri yeniden oluştururken, fdiskdoğrudan sektör sayısını girmesine izin verdiğinden ve diske yazmadan önce değerleri kontrol edebildiğiniz için bize tavsiye ederim . Bir diski şu şekilde başarıyla geri yükledim: ilk bölüm oluşturma, varlık kabul etme, sonra "+ boyutu" (yukarıdan) sonu için girme, ikinci bölüm start/ sys ... ve "+ size" öğelerinden tekrar girme vb. yeni tabloyu yazmadan önce bölümlerin boyutu. İyi şanslar!
Jörg Gottschlich

11

GARANTİ YOK , bu sorunu çözmek için bir komut dosyası yaptım . (ancak sanal makinemde test yaptım)

Aşağıdaki komut dosyasını, ilk parametrede hasar görmüş HD ile, aşağıdaki gibi çalıştırın:

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

İçeriği 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

Çıktı bir sfdisk biçimidir. Ancak dikkatli olun , bu dosya kullanılacak şekilde değiştirilmelidir. Genişletilmiş bölüm türünde = 5, tüm mantıksal alanı ve genişletilmiş başlangıç ​​ile ilk mantıksal bölümün başlangıcı arasındaki boşluğu kullanarak boyutu artırın.

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

Türü , XX'den bölüm türü sayısına değiştirmeniz gerekir . Önyüklenebilir bölümü ilk satıra koyun .

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

Bu değişiklikleri uygula

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

Bölüm tablolarını yeniden okuma

partprobe 
/sbin/blockdev --rereadpt

Grub'u yeniden yükle

grub-install /dev/sda

1
Eğer sfdisk blok boyutlarında sayarsa, "-u B" anahtarını sfdisk için kullandığınızdan ve dikkatli olun, repart.sfdisk'deki değerleri ayarlamanız gerekebilir (genellikle ikiye bölün). 1024 bayt "," sudo sfdisk -u B -l / dev / sda ") içinde 512 bayt dışında (genellikle günümüzde 1024).
Florian

1
İlk başta yanlış okudum: Id = 5 ile sda5 değil, sda4 olan bölüm türü 5'i kastediyorsunuz. Ayrıca, benim durumumda ls -d / sys / block / sda / sda * bana sadece sda1 ve sda5 veriyor, bu yüzden kap eksik görünüyor.
wau

l'leri ayrıştırmamalısınız; bul yerine kullan
kedi

4

Testdisk'i denediniz mi? Yeniden başlattıktan sonra bile diski tarayabilir ve kayıp bölüm tablolarını kurtarabilir.

Debian ve muhtemelen Ubuntu için önceden paketlenmiş olarak mevcuttur. Muhtemelen diğer dağıtımlar.

Sıkıştırılmış bir CD önyükleme yapıyorsanız, muhtemelen önceden yüklenmiş olup olmadığını kontrol etmeye değer.


Evet yaptı. Sadece OP (askUbuntu) bağlantısını kontrol edin
Marco
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.