Một tệp ảo chứa phần nối của các tệp khác


13

Có cách nào để tạo một đối tượng hệ thống tập tin giống như thế này không:

mknod files p
cat file1 file2 ... fileN > files

Nhưng nó có thể được tìm kiếm trong, như thể nó là một tập tin thông thường?

Câu trả lời:


18

Trên các hệ điều hành dựa trên Linux, điều đó có thể được thực hiện với các thiết bị khối mạng hoặc thiết bị ánh xạ thiết bị. Các tập tin bạn có được là một thiết bị khối.

Với nbd:

ln -s /path/to/first-file file.0
...
ln -s /path/to/last-file file.19
nbd-server -C /dev/null -m 127.0.0.1:12345 file

sudo nbd-client localhost 12345 /dev/nbd0

(nối là /dev/nbd0).

Với trình ánh xạ thiết bị (kích thước tệp phải là bội số của 512):

sudo losetup /dev/loop0 file1
sudo losetup /dev/loop1 file2
s0=$(sudo blockdev --getsize /dev/loop0)
s1=$(sudo blockdev --getsize /dev/loop1)
printf '%s\n' "0 $s0 linear /dev/loop0 0" "$s0 $s1 linear /dev/loop1 0" |
  sudo dmsetup create mybundle

(nối là /dev/mapper/mybundle).


8

đã viết một trình điều khiển cầu chì ngày hôm nay, nếu ai đó quan tâm đến giải pháp cầu chì (trình ánh xạ thiết bị cũng như giải pháp nbd ở trên sẽ tạo ra các thiết bị khối không phải là tệp thông thường - sẽ bị hỏng, nếu bạn muốn sử dụng kết quả đầu ra trực tiếp với chỉnh sửa video phần mềm hoặc các công cụ khác không được chuẩn bị để đọc trực tiếp từ một thiết bị khối)

https://github.com/schlaile/concatfs


Rất giáo dục và đơn giản để sử dụng sourcecode! Cảm ơn đã làm cho nó và chia sẻ!
Grzegorz Wierzowiecki

3

Về cơ bản, bạn đã trả lời nó trong câu đầu tiên của câu hỏi: có, nó có thể được thực hiện. Tuy nhiên, bạn phải viết trình điều khiển hệ thống tập tin tùy chỉnh. Nếu nó được coi là một đối tượng hệ thống tệp, thì nó phải được xử lý bởi kernel ở một mức độ nào đó (bao gồm FUSE ). Trình điều khiển sẽ phải cung cấp phụ trợ cho API tòa nhà hệ thống tệp tiêu chuẩn ( stat(), open()v.v., bao gồm cả tìm kiếm). Bạn không thể làm điều đó hoàn toàn trong không gian người dùng (ít nhất là không phải với một hạt nhân nguyên khối - nhưng ngay cả với một hạt nhân vi mô, bạn vẫn cần phải cung cấp trình điều khiển hệ thống tệp, mặc dù chạy như một quy trình không gian người dùng thông thường).


Nó khá rõ ràng rằng nó có thể được thực hiện. Điều tôi tò mò là liệu có cách hack nhanh nào để đạt được điều này bằng cách sử dụng các gói un * x tiêu chuẩn hay không - tốt nhất là thông qua bash không cần phải viết trình điều khiển không gian kernel chuyên dụng.
Witiko

1
xem câu trả lời của Stephane - Tôi hoàn toàn quên trình ánh xạ thiết bị.
peterph
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.