ボリュームグループ外の小データを使用したlvmボリュームマルチリニアデバイスのデバイスマッパースナップショットの作成

ボリュームグループ外の小データを使用したlvmボリュームマルチリニアデバイスのデバイスマッパースナップショットの作成

私を作らなければなりません記憶の中マウントされたルートファイルシステムの実行中のスナップショット。

ファイルシステム自体はlvmデバイスにありますが、VGにはそれを拡張できる空き容量はありません。ただし、十分なRAMがあるため、バックアップしてロールバックするにはスナップショットだけが必要です。サーバーが再起動され、スナップショットに「ロールバック」されるかどうかは関係ありません。 lvmを使用して作成する方法が見つからなかったため、lvm2の代わりにデバイスマッパーを使用しています。そのため、DM用語でスナップショットオリジンを作成し、そこにスナップショットを作成する必要があります。

私は小さなデータ(tmpfsのファイルループの上に線形)のためのメモリブロックデバイスを作成して動作します。

私の問題は、私のルートfsデバイスが1つではなく2つの線形デバイスであることです。

root: 0 57000000 linear 8:48 2048
root: 57000000 160000000 linear 8:48 73869312
cow: 0 20971520 linear 7:2 0

(ルートはこのvgの唯一のLVではなく、牛は私のメモリデバイスです)

私はこの仕事についてオンラインで次のような多くの記事を見つけました。 https://wiki.gentoo.org/wiki/Device-mapper#Snapshot ただし、2つ以上のリニアデバイスの上にスナップショットソースを作成する正しい構文が見つかりませんでした。

これにより、 dmsetup table root| sed 's~linear.*~snapshot-origin /dev/mapper/root~g'| dmsetup create snapshot-origin dmesgに「コマンド失敗」というメッセージが表示されます。

[ 2957.073592] device-mapper: table: 254:1: snapshot-origin: Cannot get target device
[ 2957.073595] device-mapper: ioctl: error adding target to table

単一のリニアデバイスに同じ方法を使用すると、すべてがうまく機能します。

修正する:
同じ設定でlvmスナップショットを作成しましたが、lvmがこれをどのように処理するかを確認するために、vgにいくつかのスペースがありました。はい。しかし、手動で(私の家畜機器を使用して)これをどのように実行できるかはわかりません。

デフォルト設定:

Root: 0 57090048 linear 8:48 2048
Root: 57090048 160571392 linear 8:48 73869312

これがlvmがすることですlvcreate -s -L10G。だからこれが私が手動で作りたいものです:

Root--snap: 0 217661440 snapshot 254:1 254:4 P 8
Root-real: 0 57090048 linear 8:0 2048
Root-real: 57090048 160571392 linear 8:0 73869312
Root: 0 217661440 snapshot-origin 254:1
Root--snap-cow: 0 8388608 linear 8:0 57092096

dmドキュメントとさまざまな記事で理解している限り、rawデバイスは最初にスナップショットソースとしてマークする必要があります。

dmsetup -vvv create so --table '0 217661440 snapshot-origin /dev/mapper/Root'            
dm version   OF   [16384] (*1)
Udev cookie 0xd4d3634 (semid 12746752) created
Udev cookie 0xd4d3634 (semid 12746752) incremented to 1
Udev cookie 0xd4d3634 (semid 12746752) incremented to 2
Udev cookie 0xd4d3634 (semid 12746752) assigned to CREATE task(0) with flags DISABLE_LIBRARY_FALLBACK         (0x20)
dm create so  OF   [16384] (*1)
dm reload so  OF   [16384] (*1)
<backtrace>
Udev cookie 0xd4d3634 (semid 12746752) decremented to 1
Udev cookie 0xd4d3634 (semid 12746752) incremented to 2
Udev cookie 0xd4d3634 (semid 12746752) assigned to REMOVE task(2) with flags DISABLE_LIBRARY_FALLBACK         (0x20)
dm remove so  OF   [16384] (*1)
Udev cookie 0xd4d3634 (semid 12746752) decremented to 1
Udev cookie 0xd4d3634 (semid 12746752) waiting for zero
Udev cookie 0xd4d3634 (semid 12746752) destroyed
Command failed

アップデート2:

open("/dev/mapper/control", O_RDWR)     = 3
/...cut.../
write(1, "dm create ECS-LVRoot  OF   [1638"..., 40dm create ECS-LVRoot  OF   [16384] (*1)
) = 40
ioctl(3, DM_DEV_CREATE, 0x7f66e826f350) = -1 EBUSY (Device or resource busy)
write(1, "<backtrace>\n", 12<backtrace>
)           = 12
write(2, "Command failed\n", 15Command failed
)        = 15

関連情報