使用 LVM 為根文件系統創建快照 - Arch Linux 中文维基

跳至內容

# 使用 LVM 為根文件系統創建快照

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Create root filesystem snapshots with LVM，最近一次同步於 2015-12-20，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- LVM
- 使用_tar_備份整個系統

本文描述如何在系統啟動時為root文件系統做LVM快照，這些快照可以用來在最短時間內進行全系統備份，或者是測試系統的更新以便於按需回滾。

## 前提條件

你需要一個root文件系統為LVM分區並且利用systemd進行引導的系統，確認LVM快照相關的前提條件已經正確安裝。

## 安裝

在系統啟動過程中，利用一個新的systemd service創建一個乾淨的root卷的快照，創建`/etc/systemd/system/mk-lvm-snapshots.service` 包含以下內容:

    [Unit]
    Description=make LVM snapshots
    Requires=local-fs-pre.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`命令中的root卷的卷組名和卷名改成你系統中的相關名字，如有必要修改上述快照的大小。如果還有其它的文件系統需要進行快照，則將上述`ExecStart`屬性擴展為多條命令，用分號隔開(注意在分號前後均要留有一個空格，詳見systemd service manual)。

注意：你可以在運行的系統上測試一下`# lvcreate`命令直到得到的結果如你所需。可以用`# lvremove`刪除此快照。在運行的系統上做的快照不如在單用戶模式下或是在系統啟動時做的快照一致性更好。

創建一個新的systemd target `/etc/systemd/system/make-snapshots.target`:

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

如果`multi-user.target`不是你的預設target，則進行相應的修改。

將此新的服務生效：`# systemctl enable mk-lvm-snapshots.service`。

如果系統啟動一個新的target，LVM快照會在掛載完本地文件系統後進行創建，為此，創建一個GRUB menu entry來啟動這個新的target，基於正常啟動的`grub.cfg`創建`/boot/grub/custom.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/mapper/lvmvolume-root ro systemd.unit=make-snapshots.target
            echo    'Loading initial ramdisk ...'
            initrd  /boot/initramfs-linux.img
    }

如果{{ic|grub.cfg}發生了變更，記著相應修正`custom.cfg`。

系統通過此grub entry啟動後`# lvs`應該可以看到新創建的快照。

提示：利用`# journalctl -u mk-lvm-snapshots.service`命令可以看到新的服務啟動過程的相關輸出。

## 用法

### 備份

如要進行全系統的備份，首先以上述創建快照的target重啟系統，掛載快照卷（and further volumes, if required)，最好以只讀的方式 (`-o`) 掛載，便可以進行全系統備份，例如可以採用Full system backup with tar文章中的辦法進行備份。

在備份的過程中並不影響現有系統的使用，因為所有正常卷的修改都反應在了快照裡了。備份完後不要忘記刪除這個快照，copy-on-write的快照模式會使正常root卷的所有修改用光你的快照卷空間。如果快照卷空間用光，LVM並不能自動增長快照空間，則LVM會拒絕進一步向正常卷中寫入數據或者直接丟掉快照，都應該避免。

### 更新回滾

另外一個LVM快照的用法是進行系統更新的測試和回滾，即為已知正常使用的系統先做一個快照，再進行更新。

如果想要固化更新的內容，則可以通過`# lvremove`刪除快照的方式；如果想要回滾到更新前的狀態，可以通過`# lvconvert --merge`恢復快照，在下次系統啟動時快照會被合併到正常卷中，創建快照之後所有對正常卷的修改均被撤消。

注意：快照合併會快照卷也將不復存在，如果想進一步測試則必須再創建一個快照卷。
分類：​

- 系統恢復

使用 LVM 為根文件系統創建快照
新增話題