GNU / Linux: thiết bị khối chồng / thiết bị khối có thể xếp chồng


14

GNU / Linux có liên kết gắn kết các lớp phủ. Vì vậy, bạn có thể gắn một thư mục có thể ghi lên trên một thư mục chỉ đọc. Khi thư mục có thể ghi được ngắt kết nối, thư mục chỉ đọc không được chạm tới.

Tôi đang tìm kiếm chức năng tương tự cho các thiết bị khối - tốt nhất là với phần có thể ghi được lưu trữ trong một tệp. Vì vậy, tôi muốn chạy một cái gì đó như:

device-setup /dev/newdevice /dev/read-only-device overlayfile

Nếu tôi viết thư cho / dev / newdevice, các thay đổi sẽ được lưu trong overlayfile. Nếu tôi đọc các lĩnh vực được viết cho, tôi sẽ nhận được dữ liệu từ overlayfile. Nếu tôi đọc các lĩnh vực không được ghi vào, tôi sẽ nhận được dữ liệu từ / dev / chỉ đọc thiết bị.

Liệu một công cụ như vậy tồn tại?


Câu trả lời:


22

Bạn có thể làm điều đó với trình ánh xạ thiết bị và snapshotmục tiêu của nó .

Về cơ bản, bạn sẽ làm giống như những gì LVM làm khi bạn tạo một ảnh chụp nhanh có thể ghi.

dev=/dev/read-only-device
ovl=/path/to/overlay.file
newdevname=newdevice
size=$(blockdev --getsz "$dev")

loop=$(losetup -f --show -- "$ovl")
printf '%s\n' "0 $size snapshot $dev $loop P 8" |
  dmsetup create "$newdevname"

Sau đó, bạn có thể truy cập vào thiết bị lớp phủ như /dev/mapper/newdevice.

Nếu bạn cũng cần truy cập vào thiết bị gốc cùng một lúc, bạn có thể làm:

printf '%s\n' "0 $size snapshot-origin $dev" |
  dmsetup create originaldevice

Và truy cập nó trên /dev/mapper/originaldevice.

Bạn có thể ghi vào thiết bị đó, sau đó ngoài các đoạn được ghi vào thiết bị chụp nhanh, tệp lớp phủ sẽ chứa một bản sao của các đoạn đã được ghi đè khi ghi vào nguồn gốc ảnh chụp nhanh.

Tệp lớp phủ có thể là một tệp thưa thớt. (ví dụ: tạo nó dưới dạng truncate -s10G the-file) và không phải lớn như thiết bị gốc. Bạn có thể nói nó đầy đủ như thế nào với dmsetup status "$newdevname".

Lưu ý: Có các yêu cầu về kích thước và nội dung trên thiết bị chụp nhanh .


1
Một câu hỏi thú vị tiếp theo là liệu những thay đổi được tích lũy sau đó có thể được sáp nhập vào thiết bị gốc hay không
imz - Ivan Zakharyaschev

1
Câu trả lời tiếp theo: có. "Trình ánh xạ thiết bị cho phép bạn TẠO *) Để hợp nhất ảnh chụp nhanh của thiết bị khối trở lại thiết bị gốc của ảnh chụp nhanh." kernel.org/doc/Documentation/device-mapper/snapshot.txt
imz - Ivan Zakharyaschev

Tham số chunkize cho mục tiêu chụp nhanh (8 trong trường hợp của bạn) có nghĩa là gì? Làm thế nào để chọn nó?
imz - Ivan Zakharyaschev

1
@Tom Những số đó trong các bảng DM luôn đề cập đến các đơn vị 512 byte, không phải kích thước cung cấp vật lý của các thiết bị khối bên dưới. Vì vậy, sử dụng một cái gì đó không phải là bội số của một ảnh chụp nhanh trên đầu thiết bị có các lĩnh vực 4K sẽ là một ý tưởng tồi.
Stéphane Chazelas

1
@Tom, chunkize xác định mức độ chi tiết của ảnh chụp nhanh. nó không phải là về kích thước khối của FS cho tệp lớp phủ, mà là tính chính xác của các thao tác I / O được thực hiện trên bất cứ thứ gì đang ngồi trên thiết bị khối. Do đó rollback. Cảm ơn cho gotz vs gotize.
Stéphane Chazelas
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.