## 📸 آموزش گرفتن Snapshot و بازیابی (Restore) در LVM – سطح پیشرفته
**Snapshot در LVM** ابزاری قدرتمند برای گرفتن یک نسخهی لحظهای (Point-in-Time) از یک حجم منطقی (Logical Volume) است که میتواند در مواقعی مانند تست، بکاپ یا بازگردانی اطلاعات بهکار رود.
---
## 🔍 Snapshot چیست؟
یک **snapshot** در LVM بهصورت **copy-on-write** عمل میکند. یعنی دادههای اصلی تا زمانیکه تغییر نکنند، کپی نمیشوند؛ به همین دلیل سرعت و کارایی بالایی دارد، اما **نیاز به فضای کافی** در Volume Group دارد.
---
## 🛠️ ساخت Snapshot در LVM
### ✅ سناریو: گرفتن snapshot از LV اصلی به نام `data_lv` در Volume Group به نام `vg1`
### 1️⃣ بررسی فضای خالی:
```bash
vgs
```
### 2️⃣ ایجاد Snapshot (مثلاً 1 گیگ):
```bash
lvcreate -s -L 1G -n data_snap /dev/vg1/data_lv
```
📌 `-s`: مشخص میکند که snapshot است
📌 `-L 1G`: فضای اختصاصی برای snapshot (مراقب باش کوچک نباشد)
### 3️⃣ مانت Snapshot (اختیاری – فقط برای مشاهده یا تست):
```bash
mkdir /mnt/snap
mount /dev/vg1/data_snap /mnt/snap
```
> حالا میتوانی محتوای snapshot را مشاهده یا بکاپ بگیری.
---
## 🔁 بازیابی Snapshot در LVM
🛑 هشدار: این عملیات تمام تغییرات روی LV اصلی بعد از گرفتن snapshot را حذف میکند!
### 1️⃣ آنمانت کردن LV اصلی (اگر مانت است):
```bash
umount /dev/vg1/data_lv
```
### 2️⃣ بازگردانی Snapshot:
```bash
lvconvert --merge /dev/vg1/data_snap
```
📌 این دستور Snapshot را با LV اصلی ترکیب و آن را به زمان Snapshot برمیگرداند.
### 3️⃣ ریبوت یا مانت مجدد:
در برخی موارد نیاز است که سیستم ریبوت شود تا تغییرات کامل اعمال شوند:
```bash
reboot
```
یا:
```bash
mount /dev/vg1/data_lv /mnt/data
```
---
## 🧹 حذف Snapshot (اگر دیگر نیاز نیست):
```bash
lvremove /dev/vg1/data_snap
```
---
## 📌 نکات مهم
* Snapshotها **دائمی نیستند**. اگر فضای اختصاصیافته به snapshot پر شود، snapshot خراب میشود.
* از snapshotها بیشتر برای **بکاپ موقت، تست یا Rollback سریع** استفاده میشود.
* همیشه فضای مناسب در VG برای ساخت snapshot در نظر بگیر.
---
## ✅ جمعبندی
قابلیت snapshot در LVM ابزاری فوقالعاده برای گرفتن نسخه موقت از دادههاست. در مواقعی مثل ارتقای نرمافزار، تست تغییرات یا بازیابی سریع، snapshot میتواند از فاجعه جلوگیری کند.