Bagaimana menemukan ukuran partisi yang tidak di-mount di Linux?

14

Saya menggunakan tune2fs, tetapi memberikan data dalam blok, dan saya tidak bisa mendapatkan nilai yang tepat dari ukuran total partisi.

Saya juga pernah menggunakan fdisk -l /dev/mmcblk0p1, tetapi ukuran yang saya dapatkan dari sini juga nilainya berbeda.

Bagaimana saya bisa menemukan ukuran partisi yang tepat?

Sarthak_Bhutani
sumber
8
Perhatikan bahwa tune2fs tidak mencetak ukuran partisi, ia mencetak ukuran sistem file . Filesystem mungkin lebih kecil dari partisi (jika ada ruang yang tidak terpakai pada partisi), mungkin lebih besar dari partisi (jika partisi entah bagaimana terpotong; jelas filesystem rusak dalam kasus itu, tapi tetap saja itu lebih besar dari partisi). Ini juga dapat span beberapa partisi, atau bahkan menjadi "virtual", yaitu bahkan tidak memiliki perangkat pendukung (misalnya sysfs, procfs, tmpfs).
Jörg W Mittag

Jawaban:

22

Perintahnya adalah:

blockdev --getsize64 /dev/mmcblk0p1

Ini memberikan hasil dalam byte, sebagai integer 64-bit. Ini menanyakan ukuran byte dari perangkat blok , karena kernel melihat ukurannya.

Alasannya, mengapa fdisk -l /dev/mmcblk0p1tidak berfungsi, adalah karena fdiskmelakukan beberapa hal yang sama sekali berbeda: ia membaca di tabel partisi (= sektor pertama) dari perangkat blok, dan mencetak apa yang ditemukannya . Itu tidak memeriksa apa pun, hanya mengatakan apa yang ada di tabel partisi.

Bahkan tidak mengganggu jika tabel partisi rusak, atau perangkat blok tidak memiliki satu: itu akan mencetak peringatan bahwa checksum tidak apa-apa, tetapi masih mencetak apa yang ditemukan, bahkan jika nilainya jelas tidak -merasakan.

Inilah yang terjadi dalam kasus Anda: /dev/mmcblk0p1 tidak memiliki tabel partisi. Seperti yang ditunjukkan oleh nama perangkat, itu sudah merupakan partisi pertama dari disk fisik /dev/mmcblk0. Disk ini berisi tabel partisi, seandainya Anda menanyakannya fdisk -l /dev/mmcblk0, ia telah bekerja (dengan asumsi ia memiliki tabel partisi msdos).

peterh - Pasang kembali Monica
sumber
Ruang partisi saya persis 2gb tetapi blockdev dan fdisk sama-sama memberikan nilai lebih rendah dari itu di mana ruang yang tersisa dan tolong katakan juga perintah untuk mengambil nilainya
Sarthak_Bhutani
@Sarthak_Bhutani Informasi apa yang Anda butuhkan tidak dicetak fdisk -l /dev/mmcblk0? Ini akan memberi tahu Anda ukuran satu blok, jumlah total blok pada perangkat, ukuran partisi dan juga blok awal dan akhir dari setiap partisi. Anda juga bisa mengetahui rentang blok yang tidak ditugaskan ke partisi mana pun dari info itu.
BlackJack
9

Coba lsblk, itu bahkan tidak memerlukan root:

$ lsblk -b
NAME    MAJ:MIN RM        SIZE RO TYPE MOUNTPOINT
xvda    202:0    0 34359738368  0 disk 
├─xvda1 202:1    0  1676673024  0 part [SWAP]
└─xvda2 202:2    0 32682016768  0 part /var/spool

The -bparameter mengatakan itu untuk output ukuran dalam bytes.

heinrich5991
sumber
Ini adalah alat yang sangat bagus !!! Terima kasih! +1!
rmbianchi
5

Untuk mendapatkan nilai persis ukuran total dari menjalankan partisi:

awk '{print $1*512}' /sys/class/block/mmcblk0p1/size
GAD3R
sumber
2
Saya pikir itu juga tergantung pada apakah ukuran sektor adalah 512 (yang merupakan mayoritas kasus saat ini).
peterh
1
@ Peterh Sebenarnya tidak biasa untuk perangkat blok masih memiliki ukuran sektor fisik 512 hari ini, tetapi banyak hal (saya tidak dapat menemukan informasi pasti pada / sys / class / blok) dirancang untuk melaporkan dalam unit 512 byte terlepas dari ukuran blok yang sebenarnya.
Random832
0

Solusi saya:

part_dev='/dev/hda2'

total_block=`tune2fs -l $part_dev | awk '/Block count/ {print $3}'`
block_size=`tune2fs -l $part_dev | awk '/Block size/ {print $3}'`

total_size=$(($total_block* $block_size))

echo $total_size

di mana /dev/hda2partisi yang belum tentu dipasang. itu diuji dengan tune2fsver 1.42.4

pengguna1916016
sumber