
**Proxmox VE**, 3.4 sürümünden beridir, **ZFS** desteği ile birlikte geliyor. **ZFS**, copy-on-write bir dosya sistemi olarak, snapshot konusundaki özellikleri ile öne çıkıyor:

- Snapshotlar sistem yeniden başlatıldığında kalıcıdır.
- 264 adette kadar snaphot alınabilir.
- Snapshotlar ayrı bir yedekleme alanı kullanmaz. Snapshotlar, disk alanını doğrudan oluşturuldukları dosya sistemi veya birim ile aynı depolama havuzundan tüketir.
- Özyinelemeli snapshotlar, tek bir atomik işlem gibi hızlı bir şekilde oluşturulur. Snapshotlar birlikte (hepsi aynı anda) oluşturulur veya hiç oluşturulmaz. Atomik snapshot işlemlerinin avantajı, snapshot verilerinin, alt dosya sistemlerinde bile her zaman tutarlı bir zamanda alınmasıdır.

**ZFS**‘in snapshot yetenekleri, VM’de oluşabilecek kazaları veya geri dönüşleri kolaylaştırır. Bu bakımdan eğer **Proxmox VE**‘de **ZFS** kullanıyorsanız, otomatik snapshot almak, operasyonlarınızı kolaylaştıracaktır.

Unutmayın, snapshot bir yedek değildir! Eğer VM dışında bir probleminiz oluşursa: depolama, güvenlik duvarı, internet, hipervizör veya herhangi bir felaket karşı tedbir almak isterseniz, **Proxmox Backup Server** ile hem lokal hem de uzak yedek alabilirsiniz.

[**cv4pve-autosnap**](https://github.com/Corsinvest/cv4pve-autosnap) isimli araç ile aşağıdaki adımlar ile otomatik snapshot almayı ayarlayacağız.

## Proxmox VE’de Kullanıcı Oluşturulması

**cv4pve-autosnap**, **Proxmox VE**‘ye bağlanmak için Proxmox VE API’sini kullanıyor. Bunun için de bir kullanıcı oluşturup, bu kullanıcıya yetki vermemiz gerekiyor.

**Datacenter -> Permissions -> Users -> Add** adımından kullanıcıyı aşağıdaki gibi ekliyoruz:

![otomatik snapshot alma](/images/blog/proxmox-ve-icin-otomatik-snapshot.png)

Password değeri için karmaşık bir parola belirlemenizi tavsiye ederiz. Biz bu belgemiz için parola olarak, YOUR_PASSWORD değerini kullanacağız.

## Proxmox VE’de Rol Oluşturulması

**Datacenter -> Permissions -> Roles -> Create** adımıyla **cv4pve-autosnap** isimli bir rol oluşturup, **Privileges** kısmından Datastore.Audit, Pool.Allocate, VM.Audit, VM.Snapshot yetkilerini seçiyoruz.

![VM.Snapshot yetkileri](/images/blog/proxmox-ve-icin-otomatik-snapshot-1.png)

## Proxmox VE’de Rol Ataması Yapılması

**Datacenter -> Permissions** kısmından, oluşturduğumuz **cv4pve-autosnap** için, **cv4pve-autosnap** rolünü atıyoruz:

![cv4pve-autosnap rolü](/images/blog/proxmox-ve-icin-otomatik-snapshot-2.png)

## cv4pve-autosnap Kurulumu

Proxmox VE kümesindeki herhangi bir hipervizöre SSH ile bağlanıp aşağıdaki komutları sırasıyla çalıştırıyoruz:

```
# apt install -y unzip
# wget https://github.com/Corsinvest/cv4pve-autosnap/releases/download/v1.14.8/cv4pve-autosnap-linux-x64.zip
# unzip cv4pve-autosnap-linux-x64.zip
# chmod +x cv4pve-autosnap
# mv cv4pve-autosnap /usr/local/bin/
# mkdir /etc/cv4pve-autosnap
```

Sırası ile aşağıdaki üç dosyayı, /etc/cv4pve-autosnap klasörü içerisine oluşturuyoruz:

/etc/cv4pve-autosnap/clean.parm:

```
--host=localhost
--username=cv4pve-autosnap@pve
--password=YOUR_PASSWORD
--vmid=all
--timestamp-format=yyMMdd_HHmm
--max-perc-storage=80
snap
--label=hourly
--keep=16
```

Eğer belirli VM’ler için snapshot almak isterseniz, vmid parametresinde VM’lerin listesini virgül ile sıralayıp verebilirsiniz: vmid=100,101,102 gibi.

Eğer bütün VM’leri yedek alıp, belirli VM’leri hariç tutmak isterseniz: vmid=all,-100,-101 gibi.

keep değeri, eski snapshotların otomatik silinmesini sağlar. Buradaki ayarlarda, son 16 adet snapshot saklanıyor olacak.

/etc/cv4pve-autosnap/status.parm:

```
--host=localhost
--username=cv4pve-autosnap@pve
--password=YOUR_PASSWORD
--vmid=all
status
```

Üstteki dosyalar sayesinde, komutlar için parametreleri kaydetmiş oluyoruz:

## Snapshot almak için:

```
# cv4pve-autosnap @/etc/cv4pve-autosnap/snap.parm
ACTION Snap
PVE Version:      8.1.3
VMs:              all
Label:            hourly
Keep:             16
State:            False
Only running:     False
Timeout:          30 sec.
Timestamp format: yyMMdd_HHmm
Max % Storage :   80%
                  Storage      Type     Valid   Used %    Disk Size  Disk Usage
        pve11/local-nvme1   zfspool        Ok       4.6     1.76 TB    82.77 GB
          pve11/local-xfs       dir        Ok         6   476.71 GB     28.6 GB
          pve11/local-zfs   zfspool        Ok         0   861.02 GB       96 KB
----- VM 5001 qemu stopped -----
Skip VM is template
----- VM 7001 qemu running -----
Create snapshot: autohourly231224_1600
VM execution 00:00:03.7197946
----- VM 7002 qemu running -----
Create snapshot: autohourly231224_1600
VM execution 00:00:03.6531510
----- VM 9194 qemu running -----
VM 9194 consider enabling QEMU agent see https://pve.proxmox.com/wiki/Qemu-guest-agent
Create snapshot: autohourly231224_1601
VM execution 00:00:00.5684604
Total execution 00:00:08.2037206
```

Alınan snapshotları, Proxmox VE arayüzünden görebilirsiniz:

![Alınan snapshotları, Proxmox VE arayüzünden görebilirsiniz](/images/blog/proxmox-ve-icin-otomatik-snapshot-3.png)

## Snapshot’ları listelemek için:

```
# cv4pve-autosnap @/etc/cv4pve-autosnap/status.parm
+-------+------+-------------------+-----------+-----------------------+-----------------+-----------+
| NODE  | VM   | TIME              | PARENT    | NAME                  | DESCRIPTION     | VM STATUS |
+-------+------+-------------------+-----------+-----------------------+-----------------+-----------+
| pve11 | 7001 | 23/12/24 13:00:53 | no-parent | autohourly231224_1600 | cv4pve-autosnap |           |
| pve11 | 7002 | 23/12/24 13:00:57 | no-parent | autohourly231224_1600 | cv4pve-autosnap |           |
| pve11 | 9194 | 23/12/24 13:01:01 | no-parent | autohourly231224_1601 | cv4pve-autosnap |           |
+-------+------+-------------------+-----------+-----------------------+-----------------+-----------+
```

## Snapshotların tamamını temizlemek için:

```
# cv4pve-autosnap @/etc/cv4pve-autosnap/clean.parm
ACTION Clean
VMs:              all
Label:            hourly
Keep:             0
Timeout:          30 sec.
Timestamp format: yyMMdd_HHmm
Skip VM is template
----- VM 7001 qemu -----
Remove snapshot: autohourly231224_1600
----- VM 7002 qemu -----
Remove snapshot: autohourly231224_1600
----- VM 9194 qemu -----
Remove snapshot: autohourly231224_1601
```

Eğer belirli bir VM’in snapshotlarını silmek istersek, örneğin 7001 ID’li VM’i, aşağıdaki komutu çalıştırabiliriz:

```
cv4pve-autosnap --host=localhost --username=cv4pve-autosnap@pve --password=YOUR_PASSWORD --vmid=7001 --timestamp-format=yyMMdd_HHmm clean --label=hourly --keep=0
```

Eğer bütün bu işlemler sizin için uygunsa, her 3 saatte bir otomatik snapshot almak için crontab -e komutuyla, aşağıdaki satırı crontab’a ekleyebilirsiniz. Biz saatleri listeleyerek ekledik, fakat */3 de kullanılabilir:

```
0 1,4,7,10,13,16,19,22 * * * /usr/local/bin/cv4pve-autosnap @/etc/cv4pve-autosnap/snap.parm
```

Aşağıdaki komutla, label=hourly için aldığımız snapshotları dosya sisteminde de görebiliriz:

```
# zfs list -t all | grep hourly
local-nvme1/vm-7001-disk-0@autohourly231224_1615  3.20M      -  2.76G  -
local-nvme1/vm-7002-disk-0@autohourly231224_1615  2.95M      -  2.39G  -
local-nvme1/vm-9194-disk-0@autohourly231224_1615   880K      -  1.50G  -
```

Sadece belirli bir VM diski için snapshotların ne kadar yer kapladığını aşağıdaki komutla bakabiliriz:

```
# zfs get usedbysnapshots local-nvme1/vm-9194-disk-0
NAME                        PROPERTY         VALUE     SOURCE
local-nvme1/vm-9194-disk-0  usedbysnapshots  1.13M     -
```

[**proxmox-autosnap**](https://github.com/apprell/proxmox-autosnap) isimli araç da benzer bir işlev görmek ile birlikte, sadece yüklü olduğu hipervizördeki VM’ler için otomatik snapshot alabiliyor. Bu bakımdan, bu aracın bütün Proxmox VE’deki hipervizörlere kurulması gerekmekte. Bu yüzden [**cv4pve-autosnap**](https://github.com/Corsinvest/cv4pve-autosnap) isimli aracı tercih etmiş olduk.
