Tại sao hệ thống tập tin ext không lấp đầy toàn bộ thiết bị?


8

Tôi vừa nhận thấy bất kỳ hệ thống tập tin mở rộng {2,3,4} nào tôi đang cố gắng tạo trên 500G HDD không sử dụng tất cả dung lượng có sẵn (466G). Tôi cũng đã thử reiser3, xfs, jfs, btrfs và thậm chí vfat. Tất cả đều tạo fs có kích thước 466G (như được hiển thị bởi df -h ). Tuy nhiên, ext * tạo fs của 459G. Vô hiệu hóa các khối dành riêng làm tăng không gian có sẵn cho người dùng, nhưng kích thước của fs vẫn là 459G.

Tương tự là đối với ổ cứng 1Tb: reiserfs 932G, ext4 917G.

Vậy, sự khác biệt 1,5% này là gì? Tại sao nó xảy ra và có cách nào để làm cho ext điền toàn bộ âm lượng?

CẬP NHẬT: Tất cả các thử nghiệm được thực hiện trên cùng một máy, trên cùng một ổ cứng, v.v ... Không quan trọng là 466G khác với tiếp thị 500G như thế nào. Vấn đề là nó khác nhau đối với các FS khác nhau '.

Giới thiệu về df - nó hiển thị tổng kích thước FS, kích thước được sử dụng và không gian trống. Trong trường hợp này tôi có:

cho reiserfs:

/ dev / sda1 466G 33M 466G 1% / mnt

cho ext4:

/ dev / sda1 459G 198M 435G 1% / mnt

Nếu tôi tắt đặt chỗ khối gốc, 435G sẽ thay đổi thành 459G - kích thước đầy đủ của fs (trừ 198M). Nhưng bản thân fs vẫn là 459G cho ext4 và 466G cho reiser!

CẬP NHẬT2: Điền khối lượng với dữ liệu thực qua dd:

reiserfs:

fs: ~ # dd if = / dev / zero of = / mnt / 1
dd: запии
975702649 + 0 запи
975702648 + 0 записей написнао
 ко55555555555555555555555555555555555555555555555555555555555555555555555555555555555555

ext2 với các khối đặt trước đã tắt (mke2fs -m 0):

fs: ~ # dd if = / dev / zero of = / mnt / 1
dd: запии
960356153 + 0 запи
960356152 + 0 записей написнао
 коппии

Xin lỗi cho tiếng Nga, nhưng tôi đã chạy nó trong ngôn ngữ mặc định và lặp lại nó quá dài. Nó không quan trọng, đầu ra dd là rõ ràng.

Vì vậy, hóa ra mke2fs thực sự tạo ra hệ thống tập tin nhỏ hơn so với các mkfs khác.


2
Có một lượng chi phí nhất định với mỗi FS ... tôi không biết một thứ sẽ cho phép bạn có quyền truy cập vào tất cả không gian vật lý có sẵn trên đĩa.
prodigitalson

Tôi khuyên bạn nên thay đổi tên hiển thị của mình và đặt những gì dường như là blog của bạn vào trường trang web trong hồ sơ của bạn, để làm cho nó ít quảng cáo một cách trắng trợn.
Hello71

1
Xin chào71, cảm ơn vì lời khuyên. Trang web không thực sự quan trọng, nó chỉ dành cho openid.
Ineu

Để lưu ý trong tương lai, nếu bạn nhanh chóng muốn một chương trình xuất ra tiếng Anh, hãy sử dụng LANG=C foohoặcLC_ALL=C foo
Alan Pearce

Alan, phải, cảm ơn bạn. Nó thậm chí có thể là LANG = hoặc LANG = POSIX. Nhưng như tôi đã nói, quá trình này mất rất nhiều thời gian nên việc chạy lại nó với các ngôn ngữ khác nhau chỉ với một vài dòng là không hợp lý :) Trong cả hai trường hợp, nó chứng tỏ vấn đề với kích thước FS cho ext2 :(
Ineu 20/8/2016

Câu trả lời:


19

Có hai lý do này là đúng.

Đầu tiên, vì một số lý do hoặc các nhà văn hệ điều hành khác vẫn báo cáo không gian trống theo hệ thống cơ sở 2 và các nhà sản xuất ổ cứng báo cáo không gian trống theo hệ thống cơ sở 10. Ví dụ, một người viết hệ điều hành sẽ gọi 1024 byte (2 ^ 10 byte) một kilobyte và một nhà sản xuất ổ cứng sẽ gọi 1000 byte một kilobyte. Sự khác biệt này là khá nhỏ đối với kilobyte, nhưng một khi bạn đạt tới terabyte, điều đó khá đáng kể. Một nhà văn hệ điều hành sẽ gọi 1099511627776 byte (2 ^ 40 byte) một terabyte và nhà sản xuất ổ cứng sẽ gọi 1000000000000 byte một terabyte.

Hai cách khác nhau để nói về kích thước thường xuyên dẫn đến nhiều nhầm lẫn.

Có một tiền tố ISO được hỗ trợ một cách ngẫu nhiên cho các kích thước nhị phân . Các giao diện người dùng được thiết kế với tiền tố mới sẽ hiển thị TiB, GiB (hay nói chung là XiB) khi hiển thị kích thước với hệ thống tiền tố cơ sở 2.

Thứ hai, df -h báo cáo có bao nhiêu dung lượng có sẵn cho việc sử dụng của bạn. Tất cả các hệ thống tập tin phải viết thông tin vệ sinh để theo dõi mọi thứ cho bạn. Thông tin này chiếm một số không gian trên ổ đĩa của bạn. Nói chung không nhiều lắm, nhưng một số. Điều đó cũng chiếm một số mất mát dường như bạn đang thấy.

Sau khi bạn chỉnh sửa bài đăng của mình để làm rõ rằng không có câu trả lời nào của tôi thực sự trả lời câu hỏi của bạn, tôi sẽ cố gắng trả lời câu hỏi của bạn ...

Các hệ thống tập tin khác nhau sử dụng lượng không gian khác nhau cho thông tin vệ sinh và báo cáo rằng việc sử dụng không gian theo những cách khác nhau.

Ví dụ, ext2 chia đĩa thành các nhóm hình trụ. Sau đó, nó phân bổ trước không gian trong mỗi nhóm xi lanh cho các nút và bản đồ không gian trống. ext3 thực hiện điều tương tự vì về cơ bản nó là ext2 + ghi nhật ký. Và ext4 cũng thực hiện chính xác điều tương tự vì đây là một sửa đổi khá đơn giản (và gần như tương thích ngược) của ext3. Và vì chi phí dữ liệu meta này được cố định khi tạo hệ thống tệp hoặc thay đổi kích thước, nên nó không được báo cáo là không gian 'đã sử dụng'. Tôi nghi ngờ điều này cũng là do dữ liệu meta của nhóm hình trụ nằm ở những vị trí cố định trên đĩa, và do đó chỉ đơn giản là được sử dụng và do đó không được đánh dấu hoặc chiếm trong các bản đồ không gian trống.

Nhưng reiserfs không phân bổ trước bất kỳ siêu dữ liệu nào. Nó không có giới hạn inode cố định khi tạo hệ thống tập tin vì nó phân bổ tất cả các nút của nó một cách nhanh chóng giống như với các khối dữ liệu. Nó, nhiều nhất, cần một số cấu trúc mô tả thư mục gốc và một bản đồ không gian miễn phí nào đó. Vì vậy, nó sử dụng ít không gian hơn khi nó không có gì trong đó.

Nhưng điều này có nghĩa là reiserfs sẽ chiếm nhiều dung lượng hơn khi bạn thêm tệp vì nó sẽ phân bổ dữ liệu meta (như inodes) cũng như không gian dữ liệu thực tế cho tệp.

Tôi không biết chính xác làm thế nào jfs và btrfs theo dõi việc sử dụng không gian dữ liệu meta. Nhưng tôi nghi ngờ họ theo dõi nó giống như reiserfs hơn. vfat nói riêng không có khái niệm inode nào cả. Bản đồ không gian trống của nó (kích thước được cố định tại hệ thống tập tin tạo (bảng FAT khét tiếng)) lưu trữ phần lớn dữ liệu mà một nút sẽ, và mục nhập thư mục (được phân bổ động) lưu trữ phần còn lại.


2
Có tiêu chuẩn ISO cho điều đó: en.wikipedia.org/wiki/Binary_prefix
Bobby

@ BOB - Vâng, và nó bắt đầu hiển thị trên màn hình. Tôi sẽ thêm nó vào câu trả lời của tôi. Cảm ơn!
Omnifarious

8

Cũng như các vấn đề mà Omnifarious đề cập, với ext2 / 3/4, một lượng không gian nhất định được dành cho root - không gian dành riêng này không hiển thị trong đầu ra của df.

Ví dụ: tạo một hệ thống tệp nhỏ (~ 100mb) với các tùy chọn mặc định, sử dụng ext2 thay vì 3 hoặc 4 để bỏ qua không gian mà tạp chí sẽ lấy theo cách khác:

swann:/tmp# dd if=/dev/zero of=./loop.fs bs=10240 count=10240
swann:/tmp# mkfs.ext2 loop.fs
swann:/tmp# mkdir loop
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     92480   2% /tmp/loop

Tinh chỉnh tùy chọn khối dành riêng (tùy chọn tune2fs' -mđặt các khối dành riêng theo tỷ lệ phần trăm và -rtùy chọn đặt các khối dành riêng dưới dạng số khối thẳng):

swann:/tmp# umount loop
swann:/tmp# tune2fs -m 25 loop.fs
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     72000   3% /tmp/loop

swann:/tmp# umount loop
swann:/tmp# tune2fs -m 0 loop.fs
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     97600   2% /tmp/loop

Như bạn có thể thấy trong ví dụ trên, ngay cả khi đăng nhập bằng root dfcũng không hiển thị không gian dành riêng trong số "Có sẵn". Không gian dành riêng không hiển thị trong số "Được sử dụng", cho dù đã đăng nhập với quyền root hoặc người dùng ít đặc quyền hơn. Điều này đôi khi có thể gây nhầm lẫn khi một hệ thống tập tin gần đầy nếu bạn không mong đợi hai sự thật này.

Cũng lưu ý rằng tune2fs, mặc dù tên của nó, có liên quan đến các hệ thống tập tin ext3 và ext4 cũng như các hệ thống ext2.


Cảm ơn câu trả lời. Không, đó không phải là về các khối dành riêng. Cập nhật câu hỏi.
Ineu

0

Về sự khác biệt giữa các hệ thống tệp, các hệ thống tệp khác nhau tổ chức các khối khác nhau và cần nhiều hoặc ít dữ liệu để xác định và theo dõi các khối. Kích thước khối cũng tạo ra sự khác biệt vì nếu bạn có nhiều hoặc ít khối cho cùng một không gian, bạn có ít nhiều "không gian" bị mất. Ngoài ra, các nhóm hệ thống tệp để tránh các tệp phân mảnh và mỗi cụm khối có một mã định danh có kích thước nào đó, do đó, nhiều hoặc ít hơn các cụm khối sẽ sử dụng không gian vật lý khác nhau trên đĩa. Vì vậy, sự khác biệt là trong cách hệ thống tập tin tổ chức không gian vật lý.

Dưới đây là một mô tả cho ext2 và bạn có thể tìm thấy một cái gì đó tương tự cho reiserfs nhưng tôi chưa bao giờ sử dụng nó vì vậy tôi không có cái nào cả.


2
Reiserfs và btrfs là không bình thường ở chỗ hầu như tất cả các thông tin kế toán được phân bổ động. Chỉ các bản sao siêu khối và bitmap không gian trống được phân bổ khi thiết lập hệ thống tệp. Tất nhiên, điều này có nghĩa là lượng không gian thực tế có sẵn cho dữ liệu ít mang tính quyết định hơn đối với các hệ thống tệp này.
Omnifarious

@Omnifarious +1 - Vì vậy, nếu tôi hiểu rõ về reiserfs và btrfs, không gian có sẵn được báo cáo sẽ lớn hơn ngay từ đầu nhưng sẽ được sử dụng cả với dữ liệu và thông tin sổ sách thay vì chỉ dữ liệu, phải không?
laurent

@ laurent-rpnet - Vâng, đúng vậy. Trong trường hợp của btrfs, nó thậm chí còn thú vị hơn. btrfs có thể triển khai RAID trên cơ sở tệp riêng lẻ, do đó, báo cáo về không gian trống có sẵn thậm chí còn khó khăn hơn vì không thể giả sử sẽ có một lượng không gian bổ sung nhất định được sử dụng cho mỗi khối được sử dụng cho dữ liệu. Ngoài ra, nó cho phép các bản sao dựa trên COW rất rẻ, do đó, viết một khối ở giữa một tệp hiện có có thể phân bổ không gian.
Omnifarious

Còn XFS, JFS và VFAT thì sao? Thật khó tin những fs nguyên thủy như FAT32 lại năng động hơn ext4.
Ineu

FAT32 cũng có các khối dành riêng cho tổ chức. Ý nghĩa của năng động ở đây là gì? Nếu phân bổ động, FAT32 không có phân bổ động, như ext và cũng không hiển thị tất cả các khối trên đĩa có sẵn cho dữ liệu. Nó cũng có một số hạn chế, hệ thống tệp ext4 không giống như không có hệ thống cấp phép trong khi ext4 có quyền POSIX và ACL và kích thước tệp tối đa là 4GB trên FAT32 và 2TB trên ext3 (không chắc chắn về ext4 nhưng ít nhất phải giống nhau).
laurent
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.