GNU / Linux: блок пристроїв накладання / блоковий блок


14

GNU / Linux має з'єднання кріплення, яке накладає бруси. Таким чином, ви можете змонтувати реєстр, що записується, на вершині режиму для читання. Якщо дір, що записується, відключений, редактор лише для читання не стосується.

Я шукаю таку ж функціональність для блокових пристроїв - бажано, щоб частина, що записується, зберігалася у файлі. Тому я хотів би запустити щось на кшталт:

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

Якщо я пишу в / dev / newdevice, зміни слід зберігати у накладеному файлі. Якщо я прочитаю записані сектори, я повинен отримати дані з overlayfile. Якщо я читаю сектори, на які не записано, я повинен отримати дані з / dev / samo-read-device.

Чи існує такий інструмент?


Відповіді:


22

Це можна зробити за допомогою картографічного пристрою пристрою та його snapshotцілі.

В основному, ви б робили те саме, що робить LVM, створюючи знімок, що можна записати.

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"

Тоді ви можете отримати доступ до накладеного пристрою як /dev/mapper/newdevice.

Якщо вам також потрібен доступ до оригінального пристрою одночасно, ви можете:

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

І отримати доступ до нього /dev/mapper/originaldevice.

Ви можете записати на цей пристрій, тоді крім фрагментів, записаних на пристрій знімка, файл накладення міститиме копію фрагментів, які були перезаписані під час запису на джерело знімка.

Файл накладення може бути розрідженим файлом. (наприклад, створити його як truncate -s10G the-file), і він не повинен бути таким великим, як оригінальний пристрій. Ви можете сказати, наскільки повно dmsetup status "$newdevname".

Примітка. На пристрої знімків потрібні вимоги щодо розміру та вмісту .


1
Наступне цікаве питання - чи згодом накопичені зміни можуть бути об'єднані в оригінальний пристрій
imz - Іван Захарящев

1
Наступна відповідь: так. "Картограф пристроїв дозволяє вам ... *) Об'єднати знімок блокового пристрою назад у початковий пристрій знімка." kernel.org/doc/Documentation/device-mapper/snapshot.txt
imz - Іван Захарящев

Що означає параметр зрізу для цілі знімка (у вашому випадку 8)? Як його вибрати?
imz - Іван Захарящев

1
@Tom Ці числа в таблицях DM завжди стосуються 512 байтових одиниць, а не розмір фізичного сектора базових блокових пристроїв. Тож використання чогось, що не є кратним 8, знімок зверху пристрою з секторами 4K було б поганою ідеєю.
Стефан Шазелас

1
@Tom, фрагмент визначає деталізацію знімка. йдеться не про розмір блоку FS для файлу накладання, а про ганебність операцій вводу / виводу, виконаних на тому, що сидить на блоковому пристрої. Звідси відкат. Дякуємо за getz vs getize.
Стефан Шазелас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.