ZFS در لینوکس (Crash Course)

دوستان خوبم، سلام.

یه بحثی اینروزا خیلی داغه و اونم Storage هست. طی حدود شش سالی که تجربه دارم خیلی سلوشن برای ذخیره‌سازی دیدم. با بیشترشون کار نکردم چون معمولا یه بار کانفیگ میشده و دیپلوی و دیگه لازم نمیشده که باهاشون سرو کله زد. البته در مورد بیشترشون مطالعه کردم برای اینکه از مکانیزم کار کردنشون اطلاع پیدا کنم. اصولا یه مقوله خیلی قدیمی به اسم Raid راه گشای خیلی از مشکلاته و همه‌چی بر مبنای Riad بوجود اومده. تا اینکه یه گروهی از توسعه دهندگان لینوکس یه پروژه‌ای شروع کردن به اسم LVM که خیلی بهتر و خیلی خلاقانه تر طراحی شده بود یه لایه بالاتر ازدیسک فیزیکی کار میکرد و خیلی خیلی مشخصه‌های بیشتر. حتما در موردش مطالعه کنید اگه تا امروز نکردید! امروز میخوام یه فایل سیستم که توسط اوراکل طراحی شد و بعدها به صورت لایبرری متن‌باز بیرون اومد را بهتون معرفی کنم. ZFS خیلی غوله و خیلی هم راه دست.

طبق معمول لازمه که نصبش کنیم. من برای این مقاله یه وایگرانت باکس Oracle Linux نصب کردم(رایگان هست و میتونید حالش رو ببرید) و میخوام روی اون یه سناریو معمولی پیدا کنم. همزمان که مینویسم دارم به این فکر میکنم که چه سناریوهایی میشه پیاده کرد و شاید چند تا مقاله دیگه هم براش بنویسیم ولی الان فقط یه سری دستورات اولیه و یه سناریو ساده رو پوشش میدیم، حتما اگه عمری باقی باشه سناریوهای جالب تری هم ارائه میدیم.

$ vagrant box add --name OracleLinux/73 http://yum.oracle.com/boxes/oraclelinux/ol73/ol73.box

البته شما به هر دلیلی میتونید از هر توزیعه دیگه‌ای که دوست دارید استفاده کنید.
خوب بریم که رفتیم.

$ vagrant init OracleLinux/73
$ vagrant up
$ vagrant ssh
$ sudo yum install http://download.zfsonlinux.org/epel/zfs-release.<dist>.noarch.rpm
$ gpg --quiet --with-fingerprint /etc/pki/rpm-gpg/RPM-GPG-KEY-zfsonlinux
pub  2048R/F14AB620 2013-03-21 ZFS on Linux <zfs@zfsonlinux.org>
    Key fingerprint = C93A FFFD 9F3F 7B03 C310  CEB6 A9D5 A1C0 F14A B620
    sub  2048R/99685629 2013-03-21

ZFS به عنوان یک Kernel Module نصب میشه. من ترجیح میدم یک بار reboot کنم تا اگه ماژول به درستی نصب شده باشه:

$ sudo yum install zfs && sudo systemctl reboot -i

من دوست دارم همیشه بعد از نصب هرچیزی یه بار آزمایش کنم که آیا درست کار میکنه یا نه! پس:

# lsmod |grep zfs
zfs                  1195533  0 
zcommon                46278  1 zfs
znvpair                80974  2 zfs,zcommon
zavl                    6925  1 zfs
zunicode              323159  1 zfs
spl                   266655  5 zfs,zcommon,znvpair,zavl,zunicode

بیایید یکم باهاش بازی کنیم. قبلش ولی باید بدونیم که تو دنیای ZFS  به کلاسترهایی که درست میکنیم pool گفته میشه.در واقع  pool معادلیه برای Volume Group در lvm. من برای این پست ۸ تا vdisk به virtual  machine  اضافه کردم:

# ls -l /dev/sd*
brw-rw---- 1 root disk 8,   0 Aug 23 18:33 /dev/sda
brw-rw---- 1 root disk 8,   1 Aug 23 18:33 /dev/sda1
brw-rw---- 1 root disk 8,   2 Aug 23 18:33 /dev/sda2
brw-rw---- 1 root disk 8,  16 Aug 23 18:33 /dev/sdb
brw-rw---- 1 root disk 8,  32 Aug 23 18:33 /dev/sdc
brw-rw---- 1 root disk 8,  48 Aug 23 18:33 /dev/sdd
brw-rw---- 1 root disk 8,  64 Aug 23 18:33 /dev/sde
brw-rw---- 1 root disk 8,  80 Aug 23 18:33 /dev/sdf
brw-rw---- 1 root disk 8,  96 Aug 23 18:33 /dev/sdg
brw-rw---- 1 root disk 8, 112 Aug 23 18:33 /dev/sdh
brw-rw---- 1 root disk 8, 128 Aug 23 18:33 /dev/sdi
brw-rw---- 1 root disk 8, 144 Aug 23 18:33 /dev/sdj
brw-rw---- 1 root disk 8, 160 Aug 23 18:33 /dev/sdk

همانطور که گفتیم باید یه pool درست کنیم. فکر میکنم کسانی که قبلا با freeNAS کار کردند درک بهتری دارند که داریم چی کار میکنیم، ولی نگران نباشید وقتی باهاش کار میکنیم ملموس و ملموس‌ تر میشه.
برای pool ساختن zfs یک دستور create داره که در واقع sub command هست. فکر کنم همه با این کانسپت در لینوکس آشنا هستیم. همزمان با استفاده از سویچ -f باید یک اسم براش مشخص کنیم. به جز این میتونیم یه پارامتر دیگه هم بدیم که مشابه raidlvl هست. من الان از mirror که معادل raid-10 هست استفاده کردم ولی همه raidlvl ها ممکن هست اینجا موقتا ازش رد میشم( پست بعدی)

# zpool create -f ashkan mirror sdb sdc sdd sde mirror sdf sdg sdh sdi

تقریبا کارمون تمام شده و این یعنی pool ایجاد شده. قبلش اجازه بدید خروجی کار را ببینیم.

# zpool status
  pool: ashkan
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    ashkan      ONLINE       0     0     0
      mirror-0  ONLINE       0     0     0
        sdb     ONLINE       0     0     0
        sdc     ONLINE       0     0     0
        sdd     ONLINE       0     0     0
        sde     ONLINE       0     0     0
      mirror-1  ONLINE       0     0     0
        sdf     ONLINE       0     0     0
        sdg     ONLINE       0     0     0
        sdh     ONLINE       0     0     0
        sdi     ONLINE       0     0     0

errors: No known data errors

خوب میبنید که همه‌چیز روبه‌راه هست و خطایی هم پیدا نکرده. میشه از pool ها لیست هم گرفت:

# zpool list
NAME      SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
ashkan   191M   238K   191M     0%  1.00x  ONLINE  -

وقتی برای اولین بار حدود بهار ۹۵ با zfs تو شرکت متبوعم؛ که در زمانش آنجا کار میکردم آشنا شدم، خیلی به نظرم جذاب میومد یکی از دلایلش این بود که کار کردن باهاش خیلی راحت بود و فقط کافی بود یه سری مفاهیم بنیادی مثل اینکه raid چیه ، lvm چیه و اصلا چرا هستند و غیره بلد میبودم و براحتی میتونستم باهاش کار میکردم. خیلی وقتها گره‌گشا شد و بعدها در خیلی پروژه ها برای اینکه از سردرد و سرو کله زدن با Raid فرار کنم یا بخوام از هر بار برای هر VG از lvm create یا lvm add استفاده کنم خیلی سریع این سلوشن رو پیشنهاد میدادم معمولا با یک دموی کوتاه و مختصر خیلی سریع هم مورد تایید قرار میگرفت. خیلی خوبه و راحت و دمه‌دسته!
یه display filesystems اجرا کنیم ببینیم چی میشه؟!

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                      8.4G  1.2G  6.9G  15% /
tmpfs                 230M     0  230M   0% /dev/shm
/dev/sda1             485M   54M  406M  12% /boot
ashkan                191M  128K  191M   1% /ashkan

بهههله. خودش mount کرده به یه زیر‌دایرکتوری از روت به اسم خودش. تصور کنید این چه قدر میتونه کمک کنه زمانی که میخواهید یه اسکریپت بنویسید برای Provisioning و این اینجوری مینونید یه متغیر تعریف کنید و بعدش هر جوری بخواهید میتونید طی اسکریپت ازش استفاده کنید. من که خیلی از کار کردن باهاش لذت میبرم و یکی از دلایلش هم همین فیچر هست.  یک لایبرری پایتونی براش پیدا کردم که خیلی کمکم کرده و صلاح میدونم حتما بهش اشاره کنم چون اگه از هر دوی اینها باهم بهره بگیرید خیلی خیلی کارتون راحت تر هم خواهد شد ولی زحمت مطلاعه کتابخونه دیگه با خودتون چون هنوز به این درجه از عرفان نرسیدم که بتونم cookbook بنویسم و از طرفی امکانش هم به خیلی دلایل نیست که اسکریپتهای خودم را پست کنم. اما فعلا یه خورده باهاش کار کنید خودتون خیلی سریع استاد میشید. منم در اسرع وقت یه سری پست دیگه از zfs مینویسم.
راستی اگه از پستم خوشتون اومد و دوست داشتید حتما با دوستان و همکارانتون هم به اشتراک بگذارید و از من با اشتراکش در شبکه‌های اجتماعیتون حمایت کنید.

بـه آمــوختن چون فــروتن شـــوي                            سخن هــاي دانندگــان بشنوي
مگوي آن سخن، كاندر آن سود نيست                       كز آن آتشت بهره جز دود نيست

قردوسی بزرگ

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *