بکاپ گیری کامل توزیع لینوکسی

فرض کنیم یک توزیع لینوکسی داریم که یه سری تغیرات روش اعمال کردیم
مثلا یه میزکار روش نصب کردیم,شخصی سازی کردیم,روش اپ نصب کردیم و…
حالا به دلایلی میخوایم رو هارد جدید نصب کنیم ولی نمیخوایم از اول بشینیم همه کار ها رو انجام بدیم
امکان ایمیج گیری از توزیعمون به صورت فایل iso هست ؟ که باهاش بتونیم توزیعمونو با تمام تغیراتی که روش اعمال کردیم,رو هارد جدید نصب کنیم؟

با دستور dd می تونین پارتیشنی که روش لینوکس دارید رو توی یه ایمیج ذخیره کنین و با همون dd دوباره restore کنین. اما اگر فقط هارد رو عوض می کنین. برای مثال نمی شه رویه معماری دیگه ای این کار رو بکنین و …

آموزشی برای این کار موجوده؟
یا اگه باید تو گوگل سرچ کنم و چی باید بزنم ؟
نحوه ایمیج گیری با دستور dd؟

اما دقت کنین. که اشتباه در این مسیر می تونه به از دست دادن دیتا ختم بشه

پس من بهتره بیخیال شم:/

دستور کلی به این شکله:

sudo dd if=/dev/sdX of=/path/to/file.img

که مقدار دقیق sdX رو باید با دستورهایی مثل lsblk به دست بیاریم:

─$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 931.5G  0 disk 
├─sda1        8:1    0    16M  0 part 
└─sda2        8:2    0   250G  0 part 
sdb           8:16   1    29G  0 disk 
└─sdb1        8:17   1    29G  0 part 
sr0          11:0    1  1024M  0 rom  
nvme0n1     259:0    0   477G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0  59.6G  0 part /
├─nvme0n1p3 259:3    0  16.4G  0 part [SWAP]
└─nvme0n1p4 259:4    0 400.5G  0 part /home

اینجا sda هارد دیسک لپتاپه که ویندوز روش نصبه. sdb یه فلشه که به usb وصله. nvme0n1 هم ssd دستگاهه که لینوکس نصبه و مشخصه که هرکدوم از پارتیشنهاش کجا mount شدن.

نکته اینجاست که مثلا اگه بخوام از هارددیسک کپی بگیرم، باید توی دستور dd مقدار sda رو وارد کنم. نه sda1 (که میشه اولین پارتیشن اون دیوایس)


نکته ای که باید مراقبش باشید اینه که آدرسهای مربوط به if (input file) و of (output file) رو برعکس وارد نکنید یا اشتباه وارد نکنید.
مثلا من برای اینکه فلشم رو با 0 باینری پر کنم (و کلا پاک بشه) این دستور رو میزنم:

sudo dd if=/dev/zero of=/dev/sdb bs=4M conv=sync status=progress

توی دایرکتوری /dev یه سری فایلهای خاص مثل zero و random و urandom هست که میشه برای یه سری کارها ازشون استفاده کرد. (اینا یه چیزی رو generate میکنن. فایل معمولی نیستن)

برای آشنایی با آپشنهای dd میتونید به help خودش مراجعه کنید. dd --help


یکی از معایب این روش (احتمالا تنها عیب این روش) اینه که حجم فایلی که ساخته میشه، برابر با حجم کل درایو هست.
یعنی برای بکاپ گیری از یه دیسک ۱ترابایت، به بیشتر از ۱ ترابایت فضای بکاپ نیاز داریم.
یه راه برای کم کردنش هست. استفاده از gzip برای فشرده سازی.

─$ sudo dd if=/dev/sdb bs=10M status=progress | gzip > sdb.img.gz                                 

اینجا با dd صرفا میخونیم و خروجی رو به جای print کردن توی ترمینال، پایپ میکنیم به gzip.
برای برگردوندن از حالت فشرده (خارج کردن از حالت فشرده و برگردوندن اطلاعات به یک هارددیسک دیگه) هم میشه از این کامند استفاده کرد:

─$ sudo gunzip sdb.img.gz | sudo dd of=/dev/sdb bs=10M

الآن یه درایو ۳۲گیگ رو با این کامند بکاپ گرفتم، شد ۱۸گیگ.


نکته:
این کامندها عملیات طولانی io انجام میدن. بهتره برای اینکه مطمئن باشیم این عملیاتها واقعا به پایان رسیدن، بهتره در پایان هر کامند، این بخش نوشته بشه:

&& sync

این باعث میشه ترمینال تا پایان اجرای دستور، مشغول بمونه و وقتی که واقعا task به پایان رسیده، ترمینال آزاد بشه.
البته میشه وقتی ترمینال آزاد شد، به عنوان یه دستور جدید sync رو بزنیم. فرقی نمیکنه.

2 Likes

خیلی خوشحالم از پاسخ هایی میدین کامل و مفهوم . ممنون از شما :heart_eyes:

1 Like