จะหาขนาดของพาร์ติชั่นที่ไม่ได้ประกอบเข้าไปบน Linux ได้อย่างไร?


14

ฉันใช้ tune2fs แต่ให้ข้อมูลเป็นบล็อกและฉันไม่สามารถรับค่าที่แน่นอนของขนาดรวมของพาร์ติชัน

ฉันได้ใช้ไปfdisk -l /dev/mmcblk0p1แล้ว แต่ขนาดที่ฉันได้รับจากที่นี่ก็เป็นค่าที่แตกต่างกัน

ฉันจะหาขนาดพาร์ติชันที่แน่นอนได้อย่างไร


8
โปรดทราบว่า tune2fs ไม่ได้พิมพ์ขนาดของพาร์ทิชันจะพิมพ์ขนาดของระบบแฟ้ม ระบบแฟ้มอาจจะมีขนาดเล็กกว่าพาร์ทิชัน (ถ้ามีพื้นที่ว่างที่ไม่ได้ใช้ในพาร์ทิชัน) มันอาจจะมีขนาดใหญ่กว่าพาร์ทิชัน (ในกรณีที่พาร์ติชันที่ถูกตัดอย่างใด; เห็นได้ชัดว่าระบบแฟ้มเสียหายในกรณีที่ว่า แต่ก็ยังจะเป็นขนาดใหญ่กว่า พาร์ติชัน) นอกจากนี้ยังอาจขยายหลายพาร์ติชันหรือแม้กระทั่ง "เสมือน" นั่นคือไม่มีอุปกรณ์สำรอง (เช่น sysfs, procfs, tmpfs)
Jörg W Mittag

คำตอบ:


22

คำสั่งคือ:

blockdev --getsize64 /dev/mmcblk0p1

มันให้ผลเป็นไบต์เป็นจำนวนเต็ม 64 บิต มันสอบถามขนาดไบต์ของอุปกรณ์บล็อกตามที่เคอร์เนลเห็นขนาดของมัน

เหตุผลที่ว่าทำไมfdisk -l /dev/mmcblk0p1ไม่ทำงานคือการที่fdiskไม่บางสิ่งที่แตกต่างกันทั้งหมด: มันอ่านในตารางพาร์ทิชัน (= ภาคแรก) ของอุปกรณ์ป้องกันและพิมพ์สิ่งที่มันพบ มันไม่ได้ตรวจสอบอะไรเลยเพียงแค่บอกสิ่งที่อยู่ในตารางพาร์ทิชัน

ไม่ต้องกังวลหากตารางพาร์ติชั่นเสียหายหรืออุปกรณ์บล็อคไม่มี: มันจะพิมพ์คำเตือนว่า checksum ไม่เป็นไร แต่ยังพิมพ์สิ่งที่พบแม้ว่าค่าจะไม่ชัดเจน -sense

นี่คือสิ่งที่เกิดขึ้นในกรณีของคุณ: /dev/mmcblk0p1 ไม่มีตารางพาร์ติชัน ตามที่ชื่อของอุปกรณ์แสดงเป็นพาร์ติชันแรกของฟิสิคัลดิสก์/dev/mmcblk0อยู่แล้ว ดิสก์นี้มีตารางพาร์ติชันคุณได้ทำการสอบถามด้วยfdisk -l /dev/mmcblk0มันทำงานได้ (สมมติว่ามีตารางพาร์ติชัน msdos)


พื้นที่พาร์ทิชันของฉันคือ 2gb แต่ blockdev และ fdisk ทั้งสองให้ค่าน้อยกว่าพื้นที่ที่เหลืออยู่และโปรดบอกคำสั่งเพื่อดึงค่าของมันด้วย
Sarthak_Bhutani

@Sarthak_Bhutani ซึ่งข้อมูลที่คุณต้องการไม่ได้พิมพ์ด้วยfdisk -l /dev/mmcblk0? ควรบอกขนาดของหนึ่งบล็อกจำนวนรวมของบล็อกบนอุปกรณ์ขนาดของพาร์ติชันและบล็อกเริ่มต้นและสิ้นสุดของแต่ละพาร์ติชัน คุณยังสามารถกำหนดช่วงบล็อกที่ไม่ได้กำหนดให้กับพาร์ติชันใด ๆ จากข้อมูลนั้น
BlackJack

9

ลอง lsblkก็ไม่ต้องใช้ราก:

$ 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

-bพารามิเตอร์บอกว่ามันเอาท์พุทขนาดไบต์


นี่เป็นเครื่องมือที่ดีมาก !!! ขอบคุณ! +1!
rmbianchi

5

ในการรับค่าที่แน่นอนของขนาดทั้งหมดของการเรียกใช้พาร์ติชัน:

awk '{print $1*512}' /sys/class/block/mmcblk0p1/size

2
ฉันคิดว่ามันขึ้นอยู่กับว่าขนาดของเซ็กเตอร์เท่ากับ 512 (ซึ่งเป็นกรณีส่วนใหญ่ที่ครอบงำในปัจจุบัน)
peterh - Reinstate Monica

1
@peterh จริง ๆ แล้วมันเป็นเรื่องผิดปกติสำหรับอุปกรณ์บล็อกที่ยังคงมีขนาดเซกเตอร์กายภาพอยู่ที่ 512 วันนี้ แต่มีหลายสิ่ง (ฉันไม่สามารถหาข้อมูลที่ชัดเจนเกี่ยวกับ / sys / class / block) ได้รับการออกแบบมาเพื่อรายงานในหน่วย 512 ไบต์ โดยไม่คำนึงถึงขนาดบล็อกที่แท้จริง
Random832

0

ทางออกของฉัน:

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

โดยที่/dev/hda2เป็นพาร์ติชันที่ไม่จำเป็นต้องติดตั้ง มันผ่านการทดสอบกับtune2fsเวอร์ชั่น 1.42.4

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.