2010-04-01 20 views
5

Làm thế nào để có được kích thước khối thưa thớt và kiểm tra xem dữ liệu có mặt tại vị trí đã cho trong tệp thưa thớt trong reiserfs/ext3 trong Linux không?Làm thế nào để kiểm tra xem khối có tồn tại trong một tệp thưa thớt (đối với bản sao chép đơn giản) không?

Tôi muốn sử dụng nó để triển khai thiết bị chặn sao chép đơn giản bằng FUSE.

Hoặc tôi nên giữ một bitmap trong một tệp riêng biệt?

Trả lời

4

/usr/src/linux/Documentation/filesystems/fiemap.txt

Các ioctl fiemap là một phương pháp hiệu quả cho không gian người dùng để có được file ánh xạ mức độ. Thay vì lập bản đồ từng khối (như bmap), fiemap trả về một danh sách các khoảng cách.

Có ví dụ về cách sử dụng nhanh trong git://kernel.ubuntu.com/cking/debug-code/ fiemap /. Tệp thưa thớt sẽ thiếu phần mở rộng cho phần "thiếu".

1

Vâng, http://lxr.linux.no/#linux+v2.6.33/arch/um/drivers/cow_user.c cho biết rằng Chế độ người dùng Linux sử dụng bitmap rõ ràng cho điều này, FWIW.

+0

Có vẻ như đã có các thiết bị COW trong Linux (một nơi nào đó trong UML hoặc trong Trình ánh xạ thiết bị). Điều cầu chì có lẽ là không cần thiết ... –

2

Kể từ Linux 3.1, lseek cung cấp cờ SEEK_HOLESEEK_DATA để di chuyển đến đầu hoặc cuối của một lỗ, vì vậy đây có thể là một thay thế cho ioctl dựa solution. Đã không thử trong thực tế, vì vậy tôi không có bất kỳ kinh nghiệm thực tế để so sánh hai.