Tôi tự hỏi làm thế nào lệnh stat tính toán các khối của một tập tin. Tôi đọc số article, nó cho biết:Lệnh stat tính các khối của một tệp như thế nào?
Giá trị st_blocks cho kích thước tệp trong khối 512 byte. (Điều này có thể nhỏ hơn st_size/512, ví dụ: khi tệp có lỗ.) Giá trị st_blksize cho phép khối "ưa thích" cho hệ thống tệp I/O hiệu quả. (Việc ghi vào một tập tin trong các đoạn nhỏ hơn có thể gây ra việc đọc-sửa-viết lại không hiệu quả.)
nhưng tôi không thể xác minh nó trong bài kiểm tra của mình.
hệ thống tệp của tôi là ext3.
các dumpe2fs -h/dev/sda3 cho thấy:
...
First block: 0
Block size: 4096
Fragment size: 4096
...
sau đó tôi chạy
[email protected]:~/Desktop$ stat Email
File: `Email'
Size: 965 Blocks: 8 IO Block: 4096 regular file
Device: 80ah/2058d Inode: 746095 Links: 1
Access: (0644/-rw-r--r--) Uid: (1000/ kent) Gid: (1000/ kent)
Access: 2009-08-11 21:36:36.000000000 +0200
Modify: 2009-08-11 21:36:35.000000000 +0200
Change: 2009-08-11 21:36:35.000000000 +0200
Nếu Blocks đây có nghĩa là: có bao nhiêu 512bytes khối, số lượng nên 2 không 8. Tôi nghĩ rằng, các khối từ hệ thống tập tin (khối io) là 4k. Nếu fs sẽ nhận được các tập tin Email, nó sẽ lấy tối thiểu 4k từ đĩa (8 x 512bytes khối), có nghĩa là 965/512 + 6 = 8. Tôi không chắc chắn nếu đoán là chính xác.
một thử nghiệm:
[email protected]:~/Desktop$ stat wxPython-demo-2.8.10.1.tar.bz2
File: `wxPython-demo-2.8.10.1.tar.bz2'
Size: 3605257 Blocks: 7056 IO Block: 4096 regular file
Device: 80ah/2058d Inode: 746210 Links: 1
Access: (0644/-rw-r--r--) Uid: (1000/ kent) Gid: (1000/ kent)
Access: 2009-08-12 21:45:45.000000000 +0200
Modify: 2009-08-12 21:43:46.000000000 +0200
Change: 2009-08-12 21:43:46.000000000 +0200
3605257/512=7041.xx = 7042
sau tôi đoán ở trên, đây sẽ là 7042 + 6 = 7048. nhưng kết quả cho thấy stat 7056.
Và một ví dụ khác từ internet tại http://www.computerhope.com/unix/stat.htm
. Tôi sao chép ví dụ ở cuối trang tại đây:
File: `index.htm'
Size: 17137 Blocks: 40 IO Block: 8192 regular file
Device: 8h/8d Inode: 23161443 Links: 1
Access: (0644/-rw-r--r--) Uid: (17433/comphope) Gid: (32/ www)
Access: 2007-04-03 09:20:18.000000000 -0600
Modify: 2007-04-01 23:13:05.000000000 -0600
Change: 2007-04-02 16:36:21.000000000 -0600
Trong ví dụ này, FS chặn là 8k. Tôi cho rằng số khối nên là 16xN, nhưng nó là 40. bị mất ...
bất cứ ai có thể giải thích, làm thế nào để tính toán các khối?
Cảm ơn!
Đồng ý. 'st_blocks' chỉ được gọi là vì lý do lịch sử. Đừng nghĩ về nó như là các khối, nhưng là số lượng không gian đĩa được sử dụng bởi các tập tin, trong các đơn vị của 512 byte. 512 byte là một đơn vị thuận tiện vì nó là đơn vị phân bổ nhỏ nhất mà bất kỳ ai sử dụng. – mark4o
Cảm ơn bạn đã giải thích. gần như rõ ràng. nhưng vẫn có câu hỏi. tôi không chắc chắn nếu nó là sự hiểu biết chính xác: st_blocks = (kích thước khối IO/512) * (số lượng IO chặn tệp được sử dụng). Ví dụ email có thể được giải thích bằng cách này: (4096/512) * 1 = 8 wxpython một không. vì tệp đã sử dụng 881 khối IO và (4096/512) * 881 = 7048 không phải 7056. và ví dụ cuối cùng không phải là: 40 thậm chí có thể không được chia chính xác cho 16 (8192/512) .. là "512byte" cho tất cả hệ thống giống nhau không? cảm ơn – Kent