Làm thế nào để tìm kích thước của một phân vùng chưa từng có trên Linux?


14

Tôi đang sử dụng Tune2fs, nhưng nó cung cấp dữ liệu theo khối và tôi không thể nhận được giá trị chính xác của tổng kích thước của phân vùng.

Tôi cũng đã sử dụng fdisk -l /dev/mmcblk0p1, nhưng kích thước nhận được từ đây cũng là một giá trị khác.

Làm thế nào tôi có thể tìm thấy kích thước phân vùng chính xác?


8
Lưu ý rằng Tune2fs không in kích thước của phân vùng, nó in kích thước của hệ thống tập tin . Một hệ thống tập tin có thể nhỏ hơn một phân vùng (nếu có không gian chưa sử dụng trên phân vùng đó), nó có thể lớn hơn một phân vùng (trong trường hợp phân vùng được bằng cách nào đó cắt ngắn, rõ ràng là hệ thống tập tin bị lỗi trong trường hợp đó, nhưng nó vẫn lớn hơn phân vùng). Nó cũng có thể trải rộng trên nhiều phân vùng hoặc thậm chí là "ảo", tức là thậm chí không có thiết bị sao lưu (ví dụ: sysfs, Procfs, tmpfs).
Jörg W Mittag

Câu trả lời:


22

Lệnh là:

blockdev --getsize64 /dev/mmcblk0p1

Nó cho kết quả tính bằng byte, dưới dạng số nguyên 64 bit. Nó truy vấn kích thước byte của một thiết bị khối , vì kernel thấy kích thước của nó.

Lý do, tại sao fdisk -l /dev/mmcblk0p1không hoạt động, đó là fdiskmột số điều hoàn toàn khác: nó đọc trong bảng phân vùng (= sector đầu tiên) của thiết bị khối và in những gì nó tìm thấy . Nó không kiểm tra bất cứ điều gì, chỉ nói những gì trong bảng phân vùng.

Nó thậm chí không bận tâm nếu bảng phân vùng bị hỏng hoặc thiết bị khối không có: nó sẽ in một cảnh báo rằng tổng kiểm tra không ổn, nhưng nó vẫn in những gì tìm thấy, ngay cả khi các giá trị rõ ràng là không -giác quan.

Đây là những gì đã xảy ra trong trường hợp của bạn: /dev/mmcblk0p1 không có bảng phân vùng. Như tên của thiết bị hiển thị, nó đã là phân vùng đầu tiên của đĩa vật lý /dev/mmcblk0. Đĩa này chứa một bảng phân vùng, nếu bạn đã truy vấn nó fdisk -l /dev/mmcblk0, nó đã hoạt động (giả sử nó có một bảng phân vùng msdos).


Không gian phân vùng của tôi chính xác là 2gb nhưng blockdev và fdisk đều cung cấp các giá trị nhỏ hơn không gian còn lại và xin vui lòng ra lệnh để lấy lại giá trị của nó
Sarthak_Bhutani

@Sarthak_Bhutani Thông tin nào bạn cần không được in bởi fdisk -l /dev/mmcblk0? Nó sẽ cho bạn biết kích thước của một khối, tổng số khối trên thiết bị, kích thước của các phân vùng và cả khối bắt đầu và kết thúc của mỗi phân vùng. Bạn cũng có thể tìm ra các phạm vi khối không được gán cho bất kỳ phân vùng nào từ thông tin đó.
BlackJack

9

Hãy thử lsblk, nó thậm chí không yêu cầu 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

Các -btham số cho nó để sản xuất các kích thước tính bằng byte.


Đây là một công cụ rất hay !!! Cảm ơn! +1!
rmbianchi

5

Để có được giá trị chính xác của tổng kích thước của phân vùng chạy:

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

2
Tôi nghĩ nó cũng phụ thuộc vào nếu quy mô ngành là 512 (chiếm đa số áp đảo trong các trường hợp hiện nay).
peterh - Phục hồi Monica

1
@peterh Thực sự không bình thường khi một thiết bị khối vẫn có kích thước cung vật lý là 512 trong những ngày này, nhưng nhiều thứ (tôi không thể tìm thấy thông tin xác định trên / sys / class / block) được thiết kế để báo cáo theo đơn vị 512 byte bất kể kích thước khối thực tế.
Random832
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.