GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara membaca tabel partisi dalam memori (kernel) /dev/sda?

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.


Linux
  1. Linux:Perbedaan Antara /dev/console , /dev/tty Dan /dev/tty0?

  2. Bagaimana Anda menukar/dev/sda dengan/dev/sdb?

  3. kernel:menonaktifkan /dev/kmem dan /dev/mem

  1. Cara membuat kata sandi acak di linux menggunakan /dev/random

  2. Akankah dd if=/dev/zero of=/dev/sda menghapus tabel partisi yang sudah ada sebelumnya?

  3. Perbedaan antara /dev/sda dan /dev/sda1

  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Seberapa Portabel /dev/stdin, /dev/stdout Dan /dev/stderr?

  3. Kapan Menggunakan /dev/random Vs /dev/urandom?