Ya, Anda dapat melakukannya dengan /sys
sistem file.
/sys
adalah sistem file palsu yang dihasilkan secara dinamis oleh kernel &driver kernel.
Dalam kasus khusus ini, Anda dapat membuka /sys/block/sda
dan Anda akan melihat direktori untuk setiap partisi di drive. Ada 2 file khusus di folder yang Anda butuhkan, start
dan size
. start
berisi offset dari awal drive, dan size
adalah ukuran partisi. Hapus saja partisi dan buat ulang dengan awal dan ukuran yang sama persis seperti yang ditemukan di /sys
.
Misalnya seperti inilah tampilan drive saya:
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
Dan inilah yang saya miliki di /sys/block/sda
:
sda1/
start: 2048
size: 131072
sda2/
start: 133120
size: 134207488
sda3/
start: 134340608
size: 840335360
sda4/
start: 974675968
size: 2097200
Saya telah menguji ini untuk memverifikasi keakuratan informasi setelah memodifikasi tabel partisi pada sistem yang sedang berjalan
Saya membuat skrip untuk membantu menyelesaikan masalah ini, dengan TIDAK ADA JAMINAN .(tapi saya menguji di mesin virtual saya)
Menjalankan skrip berikut, dengan HD yang rusak pada parameter pertama, seperti pada:
[email protected]:~$ ./repart.sh sda
Konten 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
Outputnya adalah format sfdisk. Tapi hati-hati , file ini harus dimodifikasi agar dapat digunakan. Pada tipe partisi yang diperluas =5, tingkatkan ukurannya, menggunakan semua ruang logis ditambah ruang antara awal perluasan dan awal partisi logis pertama.
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
Anda harus mengubah jenis , dari XX ke nomor tipe partisi. Letakkan dapat di-boot partisi di baris pertama.
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
Terapkan perubahan ini
cat repart.sfdisk | sfdisk -f /dev/sda
Baca ulang tabel partisi
partprobe
/sbin/blockdev --rereadpt
Instal ulang grub
grub-install /dev/sda
udah coba testdisk? Itu dapat memindai disk dan memulihkan tabel partisi yang hilang, bahkan setelah Anda mem-boot ulang.
Ini tersedia dalam bentuk pra-paket untuk Debian dan mungkin juga untuk Ubuntu. Mungkin distro lain.
Jika Anda mem-boot CD gparted, mungkin ada baiknya memeriksa untuk melihat apakah sudah diinstal sebelumnya.