「LVM によるルートファイルシステムのスナップショット作成」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎Setup: 翻訳)
(→‎Usage: 翻訳)
79行目: 79行目:
 
{{Tip|新しいサービスのメッセージを取得するには、root で {{ic|journalctl -u mk-lvm-snapshots.service}} を実行してください}}
 
{{Tip|新しいサービスのメッセージを取得するには、root で {{ic|journalctl -u mk-lvm-snapshots.service}} を実行してください}}
   
== Usage ==
+
== 使い方 ==
   
=== Backup ===
+
=== バックアップ ===
   
  +
この機能を利用してシステムのフルバックアップを行うには、スナップショット作成ターゲットでシステムを再起動します。
To use this functionality for a full system backup, restart your system with the snapshot creation target.
 
  +
スナップショットボリューム (必要であればさらにボリューム) を、できれば読み込み専用 ({{ic|-o}}) オプションを使ってマウントしてください。
Mount the snapshot volume (and further volumes, if required), preferably using the read only ({{ic|-o}}) option.
 
  +
次に、例えば tar を使って、[[Tar によるフルシステムバックアップ]] で説明されているようにシステムをバックアップします。
Then backup your system, for example with tar as described in [[Full system backup with tar]].
 
   
  +
バックアップ中は、通常のボリュームへの変更はすべて不可視なので、システムを通常通り使用し続けることができます。
During backup you can continue to use your system normally, since all changes to your regular volumes are invisible in
 
  +
スナップショット バックアップ後、スナップショットボリュームを削除することを忘れないでください。
the snapshots. Do not forget to delete the snapshot volume after the backup – changes to your regular volume will
 
  +
コピーオンライト操作により、スナップショットのスペースを使用します。スナップショット領域が完全に使用されるようになり、LVM
use up space in the snapshot due to the copy-on-write operations. If the snapshot space becomes fully used, and LVM
 
  +
が自動的にスナップショットを大きくすることができない場合、LVM は通常のボリュームへのさらなる書き込みを拒否するか、スナップショットを削除します。
is not able to automatically grow the snapshot, LVM will deny further writes to your regular volumes or drop the
 
snapshot, which should be avoided.
 
   
=== Revert updates ===
+
=== 更新を元に戻す ===
   
  +
LVM スナップショットのもう1つの用途は、更新のテストと元に戻すことです。この場合、システムのスナップショットを作成します
Another use for LVM snapshots is testing and reverting of updates. In this case create a snapshot for the system
 
  +
既知の良好な状態で、後で更新または変更を実行します。
in a known good state and perform updates or changes afterwards.
 
   
  +
更新を永続的に保持したい場合は、''lvremove'' を使用してスナップショットを削除するだけです。スナップショットに戻したい場合
If you want to permantly stick to the updates just drop the snapshot with ''lvremove''. If you want to revert to the snapshotted
 
  +
スナップショットに対して {{ic|lvconvert--merge}} を発行します。システムの次回の再起動時(デフォルトのターゲットを使用)、スナップショット
state issue a {{ic|lvconvert --merge}} for the snapshot. During the next restart of the system (use the default target) the snapshot
 
  +
通常のボリュームにマージされます。ボリュームへのすべての変更は、スナップショットが取り消された後に行われます。
is merged back into your regular volume. All changes to the volume happened after the snapshot are undone.
 
  +
{{Note|マージ後、スナップショットは存在しなくなります。ロールバックでさらにテストする場合は、新しいスナップショットを再作成します。}}
{{Note|After merging the snapshot no longer exists. Recreate a new snapshot if further testing with rollback
 
option is desired.}}
 
   
 
== Known issues ==
 
== Known issues ==

2022年2月14日 (月) 19:05時点における版

関連記事

この記事では、システム起動時にルートファイルシステムの LVM スナップショットを作成する設定方法について説明します。このようなスナップショットは、ダウンタイムを最小限に抑えた フルシステムバックアップ や、システムの更新をテストして元に戻すオプションに使用することができます。

必要なもの

LVM ルートファイルシステムと systemd を搭載したシステムが必要です。 LVM スナップショット の前提条件が正しく設定されていることを確認してください。

セットアップ

システムの起動時にルートボリュームのクリーンなスナップショットを作成するために systemd サービスを使用します。 /etc/systemd/system/mk-lvm-snapshots.service を作成します。

[Unit]
Description=make LVM snapshots
Requires=local-fs-pre.target
Wants=local-fs.target
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs-pre.target
Before=local-fs.target

[Install]
WantedBy=make-snapshots.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/lvcreate -L10G -n snap-root -s lvmvolume/root

ルートボリュームグループとボリューム名に合わせて、lvcreate コマンドを適応させます。 必要であれば、スナップショットサイズを調整します。追加のファイルシステムをスナップショットする必要がある場合 起動時に ExecStart プロパティを拡張して、lvcreate コマンドを追加することができます。  ; で区切られた (セミコロンの前後にスペースがあることに注意してください。詳しくは systemd サービスマニュアル を参照してください)。

ノート: 実行中のシステムで lvcreate コマンドが思い通りに動くまでテストする必要があります。 テスト用のスナップショットは lvremove で削除してください。実行中のシステムから取得したスナップショットは、シングルユーザーモードや起動中に取得したスナップショットほど一貫性がありません。

新しい systemd ターゲット /etc/systemd/system/make-snapshots.target を作成します。

[Unit]
Description=Make Snapshots
Requires=multi-user.target

multi-user.target がデフォルトターゲットでない場合、ベースターゲットを適応させます。デスクトップに入りたい場合は、graphical.target に変更する必要があります。

mk-lvm-snapshots.service有効化

新しいターゲットでシステムを起動すると、ローカルファイルシステムをマウントした直後に LVM snapshot(s) が作成されます。 このターゲットで起動する GRUB メニューエントリを取得するには、/boot/grub/custom.cfg をベースに作成します。 grub.cfg は通常のスタートアップ用エントリです。カーネルコマンドラインを拡張して、新しく起動する make-snapshots.target です。

### make snapshots ###
menuentry 'Arch GNU/Linux, make snapshots' --class arch --class gnu-linux --class gnu --class os {
...
        echo    'Loading Linux core repo kernel ...'
        linux   /boot/vmlinuz-linux root=/dev/lvmvolume/root ro systemd.unit=make-snapshots.target
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initramfs-linux.img
}

grub.cfg が変更された場合は、custom.cfg を調整することを忘れないでください。

この grub エントリでシステムを再起動すると、lvs に新しく作成されたスナップショットが表示されるはずです。

ヒント: 新しいサービスのメッセージを取得するには、root で journalctl -u mk-lvm-snapshots.service を実行してください

使い方

バックアップ

この機能を利用してシステムのフルバックアップを行うには、スナップショット作成ターゲットでシステムを再起動します。 スナップショットボリューム (必要であればさらにボリューム) を、できれば読み込み専用 (-o) オプションを使ってマウントしてください。 次に、例えば tar を使って、Tar によるフルシステムバックアップ で説明されているようにシステムをバックアップします。

バックアップ中は、通常のボリュームへの変更はすべて不可視なので、システムを通常通り使用し続けることができます。 スナップショット バックアップ後、スナップショットボリュームを削除することを忘れないでください。 コピーオンライト操作により、スナップショットのスペースを使用します。スナップショット領域が完全に使用されるようになり、LVM が自動的にスナップショットを大きくすることができない場合、LVM は通常のボリュームへのさらなる書き込みを拒否するか、スナップショットを削除します。

更新を元に戻す

LVM スナップショットのもう1つの用途は、更新のテストと元に戻すことです。この場合、システムのスナップショットを作成します 既知の良好な状態で、後で更新または変更を実行します。

更新を永続的に保持したい場合は、lvremove を使用してスナップショットを削除するだけです。スナップショットに戻したい場合 スナップショットに対して lvconvert--merge を発行します。システムの次回の再起動時(デフォルトのターゲットを使用)、スナップショット 通常のボリュームにマージされます。ボリュームへのすべての変更は、スナップショットが取り消された後に行われます。

ノート: マージ後、スナップショットは存在しなくなります。ロールバックでさらにテストする場合は、新しいスナップショットを再作成します。

Known issues

この記事またはセクションは情報が古くなっています。
理由: Linked report is from 2011, "currently" is August 2016. Is this still an issue? Either way, the systemd configuration should be moved to systemd as other programs may block shutdown, e.g. [1]. (Discuss)

Due to bug 681582 shutting down the system with active snapshots may hang for some time (currently 1...3 minutes). As a workaround a shorter job timeout can be set. Create a copy of /usr/lib/systemd/system/dmeventd.service in /etc/systemd/system and insert JobTimeoutSec=10:

[Unit]
Description=Device-mapper event daemon
Documentation=man:dmeventd(8)
Requires=dmeventd.socket
After=dmeventd.socket
DefaultDependencies=no
JobTimeoutSec=10

[Service]
Type=forking
ExecStart=/usr/sbin/dmeventd
ExecReload=/usr/sbin/dmeventd -R
Environment=SD_ACTIVATION=1
PIDFile=/run/dmeventd.pid
OOMScoreAdjust=-1000