فایل سیستم ZFS چیست؟

ZFS چیست و چرا در بین کاربران با تجربه بسیار محبوب است؟ در این مطلب نگاهی به تاریخچه ZFS و ویژگی‌ها و مزایای آن نسبت به سایر فایل سیستم‌ها خواهیم انداخت. ZFS یک فایل سیستم پیشرفته است که توسط شرکت Sun Microsystems طراحی شد و توانست انقلابی در دنیای فایل سیستم ایجاد کند.


تاریخچه ZFS

فایل سیستم Z یا (ZFS) توسط Matthew Ahrens و Jeff Bonwick در سال 2001 ایجاد شد. ZFS به عنوان نسل بعدی فایل سیستم برای OpenSolaris شرکت Sun Microsystems طراحی شده است. در سال 2008، ZFS به FreeBSD منتقل شد و در همان سال پروژه‌ای برای استفاده از آن در لینوکس آغاژ شد. از آنجایی که ZFS تحت پروانه توسعه و توزیع مشترک است که با GNU General Public License (پروانه جامع همگانی گنو) ناسازگار است، نمی‌توان آن را در کرنل لینوکس گنجاند. برای حل این مشکل، اکثر توزیع‌کنندگان لینوکس روش‌هایی را برای نصب ZFS ارائه می‌کنند.

مدت کوتاهی پس از اینکه اوراکل، Sun Microsystems را خریداری کرد، OpenSolaris  به متن‌بسته (close-source) تبدیل شد. تمام توسعه‌های بعدی ZFS نیز به close-source تبدیل شد. بسیاری از توسعه دهندگان  ZFS از این چرخش رویدادها ناراضی هستند. دو سوم توسعه دهندگان اصلی ZFS از جمله Ahrens و Bonwick به دلیل این تصمیم اوراکل را ترک کردند. آنها به شرکت‌های دیگر ملحق شدند و پروژه OpenZFS را در سپتامبر 2013 ایجاد کردند. این پروژه پیشرو توسعه متن‌باز ZFS بوده است.

بیایید به موضوع مجوز ذکر شده در بالا برگردیم. از آنجایی که پروژه OpenZFS از Oracle جدا است، احتمالا برخی تعجب می‌کنند که چرا مجوز را به چیزی که با GPL سازگار است تغییر نمی‌دهند تا بتواند در کرنل لینوکس گنجانده شود. طبق گفته وب‌سایت OpenZFS ، تغییر مجوز مستلزم تماس با هر کسی است که کدی را در پیاده‌سازی OpenZFS فعلی (از جمله کد اولیه و رایج ZFS تا اوپن‌سولاریس)و دریافت مجوز از آنها برای تغییر لایسنس استفاده می‌کند. از آنجایی که این کار تقریبا غیرممکن است (چون برخی از مشارکت کنندگان ممکن است مرده باشند یا به سختی پیدا شوند)، آنها تصمیم گرفته‌اند مجوزی را که دارند حفظ کنند.
 


ZFS چیست و چه ویژگی‌هایی دارد؟

همانطور که قبلا گفتم، ZFS  یک فایل سیستم پیشرفته است. به این ترتیب، ویژگی‌های جالبی دارد. مانند:

  • ذخیره سازی تلفیقی (Pooled storage)
  • کپی در نوشتن (Copy-on-write)
  • اسنپ شات (Snapshots)
  • تایید یکپارچگی داده‌ها و تعمیر خودکار 
  • RAID-Z
  • حداکثر اندازه فایل 16 اگزابایت (Exabyte)
  • حداکثر 256 کوادریلیون زتابایت (Quadrillion Zettabytes) فضای ذخیره سازی

بیایید در ادامه  چند مورد از این ویژگی‌ها را بررسی کنیم.


ذخیره سازی ترکیبی

برخلاف اکثر فایل سیستم‌ها، ZFS  ویژگی‌های یک فایل سیستم (file system) و یک مدیر حجم (volume manager) را با هم ترکیب می‌کند. این بدان معنی است که بر خلاف سایر فایل سیستم‌ها، ZFS  می‌تواند یک فایل سیستم ایجاد کند که در یک سری از درایوها یا یک استخر قرار دارد. نه تنها این، بلکه می‌توانید با افزودن درایو دیگر، فضای ذخیره سازی را به یک استخر اضافه کنید.  ZFS  پارتیشن بندی و فورمتینگ را انجام می‌دهد.

قابلیت Pooled Storage در zfs


کپی در نوشتن

کپی در نوشتن (Copy-on-write) یکی دیگر از ویژگی‌های جالب است. در اکثر فایل سیستم‌ها، وقتی داده‌ها overwritten می‌شوند، برای همیشه از بین می‌روند. در  ZFS ، اطلاعات جدید در بلوک دیگری نوشته می‌شود. پس از تکمیل نوشتن، متادیتای فایل سیستم به روز می‌شود تا به اطلاعات جدید اشاره کند تا تضمین کند که اگر در حالی که نوشتن در حال انجام است ، سیستم از کار بیفتد (یا اتفاق دیگری بیفتد) ، داده‌های قدیمی حفظ می‌شوند. همچنین به این معنی است که سیستم پس از خرابی نیازی به اجرای fsck ندارد.

اسنپ شات

کپی در نوشتن منجر به یکی دیگر از ویژگی‌های  ZFS یعنی اسنپ شات می‌شود. ZFS از اسنپ شات برای ردیابی تغییرات در فایل سیستم استفاده می‌کند. اسنپ شات حاوی نسخه اصلی فایل سیستم است و فایل سیستم زنده حاوی تغییراتی است که از زمان گرفتن اسنپ شات ایجاد شده است. از فضای اضافی استفاده نمی شود. همانطور که داده‌های جدید در فایل سیستم زنده نوشته می‌شود، بلوک‌های جدیدی برای ذخیره این داده‌ها اختصاص داده می‌شود. اگر فایلی حذف شود، مرجع اسنپ شات نیز حذف می‌شود. بنابراین، اسنپ شات‌ها عمدتا برای ردیابی تغییرات فایل‌ها طراحی شده‌اند، اما نه اضافه کردن و ایجاد فایل‌ها.

Snapshot را می‌توان به صورت فقط خواندنی(read-only) برای بازیابی نسخه قبلی یک فایل نصب کرد. همچنین امکان بازگرداندن سیستم زنده (live system) به یک اسنپ‌شات قبلی وجود دارد. تمام تغییرات ایجاد شده از زمان اسنپ شات از بین خواهد رفت.

تایید یکپارچگی داده‌ها و تعمیر خودکار

هر زمان که داده‌های جدیدی در ZFS نوشته می‌شود، یک checksum برای آن داده‌ها ایجاد می‌کند. هنگامی که آن داده‌ها خوانده می‌شود، checksum تایید می‌شود. اگر checksum مطابقت نداشته باشد، ZFS می‌داند که یک خطا شناسایی شده و بعد ZFS به طور خودکار سعی می کند خطا را تصحیح کند.


RAID-Z

ZFS می تواند RAID را بدون نیاز به نرم افزار یا سخت افزار اضافی مدیریت کند. جای تعجب نیست که ZFS پیاده سازی RAID خود را دارد؛ RAID-Z در واقع نوعی از RAID-5 است. با این حال، برای رفع  خطای write hole در RAID-5 طراحی شده است، که در آن اطلاعات date و parity پس از یک ریستارت غیرمنتظره ناسازگار می‌شوند. برای استفاده از سطح پایه RAID-Z یا (RAID-Z1) به حداقل دو دیسک برای ذخیره سازی و یکی برای parity نیاز است. RAID-Z2 به حداقل دو درایو ذخیره سازی و دو درایو برای parity نیاز دارد. RAID-Z3 به حداقل دو درایو ذخیره سازی و سه درایو برای parity نیاز دارد. هنگامی که درایوها به استخرهای RAID-Z اضافه می‌شوند، باید در مضرب دو اضافه شوند.

بررسی RAID-Z در ZFS

ظرفیت ذخیره سازی عظیم

زمانی که ZFS ایجاد شد، به گونه‌ای طراحی شد که حرف آخر در بین فایل سیستم‌ها را بزند. در زمانی که اکثر هی فایل سیستم‌ها  64 بیتی بودند، سازندگان ZFS تصمیم گرفتند برای اثبات آن در آینده به سمت 128 بیتی بروند. این بدان معنی است که زد اف سی،  16 میلیارد میلیارد برابر ظرفیت سیستم‌های 32 یا 64 بیتی را ارائه می‌دهد. در واقع، جف بونویک (یکی از سازندگان) گفت که تامین کامل انرژی یک استخر ذخیره‌سازی 128 بیتی به انرژی بیشتر از جوشاندن اقیانوس‌ها نیاز دارد.
 

سرور مجازی یک ماشین مجازی کامل است که می‌توانید سیستم عامل مورد نظر خود را روی آن انتخاب کنید.
خرید وی پی اس در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.

چگونه ZFS را نصب کنیم؟

اگر می خواهید از ZFS به طور خلاق و حرفه‌ای استفاده کنید، نیاز به نصب FreeBSD یا یک سیستم عامل با کرنل illumos دارد. illumos یک فورک از کرنل OpenSolaris است.

در واقع، پشتیبانی از ZFS یکی از دلایل اصلی انتخاب برخی از کاربران باتجربه لینوکس برای BSD است.

 

اگر می خواهید ZFS را روی لینوکس امتحان کنید، در ادامه یک آموزش سریع در مورد نصب پشتیبانی ZFS در دبیان 12 (Bookworm) با استفاده از گزینه apt یا  apt-get در خط فرمان آورده شده است:

 

  1. برنامه ترمینال خود را باز کنید.
  2. برای ورود به سرور با استفاده از دستور ssh

ssh user@debian-12-server

  1.  با استفاده از دستور sed، مخزن contrib را به /etc/apt/sources.list اضافه یا فعال کنید:

sed -r -i'.BAK' 's/^deb(.*)$/deb\1 contrib/g' /etc/apt/sources.list

وقتی contrib به هر خط اضافه می‌شود:

 

  1. دیتابیس apt repo را به روز کنید، تایپ کنید:

apt update


پکیج zfs را روی Debian Linux 12 نصب کنید:


apt install linux-headers-amd64 zfsutils-linux zfs-dkms zfs-zed

آیا از سرور ابری با کرنل لینوکس ابری استفاده می‌کنید؟ تلاش كردن:


apt install linux-headers-cloud-amd64 zfsutils-linux zfs-dkms zfs-zed

آن را با اجرای دستور zfs version تست کنید:


modprobe zfs #<--load the module
zfs version

خروجی:


zfs-2.1.11-1
zfs-kmod-2.1.11-1

تبدیل یک دیسک ساده dev/xvdf/ به ZFS

فرض کنید یک دیسک ذخیره سازی بلوکی مبتنی بر ابر به نام dev/xvdf/ دارید. در ادامه نحوه ایجاد دیسک‌های ZFS تحت لینوکس آمده است:

تمام داده‌ها را از dev/xvdf/ حذف کنید (نام دستگاه صحیح را جایگزین dev/xvdf/ کنید):


sudo sgdisk --zap-all /dev/xvdf

در مرحله بعد باید یک پارتیشن Solaris ZFS ایجاد کنید. مثلا:


sudo sgdisk --new=1:0:0 --typecode=1:BF00 /dev/xvdf

یک استخر ZFS جدید برای لینوکس ایجاد کنید:


sudo zpool create -f -d -m none -o ashift=12 -O atime=off -o feature@lz4_compress=enabled backup /dev/xvdf1


دستور بالا یک استخر ZFS جدید به نام backup را با استفاده از سوئیچ‌های دستور zpool create ایجاد می‌کند:

•    f- : اجبار برای ایجاد یک استخر جدید
•    d- :  دیسکاوری دیوایس اتوماتیک را غیر فعال می‌کند.
•    m none- : از mirror برای محافظت از استخر استفاده نمی‌کند زیرا من یک دیسک در اینجا دارم.
•    o ashift=12 -  مقدار  alignment shift را روی 12 تنظیم می‌کند که عملکرد فایل‌های بزرگ را بهبود بدهد.
•    O atime=off- : ردیابی زمان دسترسی را غیرفعال میکند که عملکرد را بهبود بخشد.
•    -o feature@lz4_compress=enabled : فشرده‌سازی LZ4 را برای استخر فعال می‌کند تا در مصرف فضای دیسک صرفه‌جویی شود.
•    /dev/xvdf1 : دستگاه ذخیره سازی بلوک برای استفاده برای استخر.


ایجاد یک مجموعه داده جدید:


sudo zfs create backup/rsnapshot
sudo zfs set compression=lz4 backup/rsnapshot
sudo zfs set atime=off backup/rsnapshot
sudo zfs set mountpoint=/backup backup

اکنون می توانید از /backup/rsnapshot/ برای ذخیره فایل‌ها و تایید با استفاده از دستور mount یا دستور df  یا دستور du استفاده کنید. از دستور زیر برای دریافت اطلاعات فضایی در مورد استخر ذخیره سازی zfs استفاده کنید:


sudo zpool list


خروجی ها:

NAME     SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
backup   127G  15.4G   112G        -         -      -    12%  1.00x    ONLINE  -

 

تمام شد! اکنون ZFS بر روی دبیان 12 (Bookworm)  نصب شده است. می توانید از دستورات zfs و zpool برای ایجاد استخرهای جدید و تعمیر و نگهداری ZFS استفاده کنید. برای اطلاعات بیشتر، صفحات راهنمای زیر را با استفاده از دستور man یا دستور help ببینید:

man zpool
man zfs
man apt
man apt-get
man sources.list

آیا تا به حال از ZFS استفاده کرده‌اید؟ تجربه‌ای که داشتید چطور بود؟ در قسمت نظرات با ما به اشتراک بگذارید. اگر این مطلب برای شما جالب بود، لطفا یک دقیقه وقت بگذارید و آن را در رسانه های اجتماعی، به اشتراک بگذارید.