گنو/لینوکس

معرفی و آموزش نصب فایل سیستم ZFS در لینوکس

نوشته شده توسط اروند طباطبایی

ZFS یک فایل سیستم ترکیبی به همراه ابزار مدیریت فضا و چندین قابلیت فوق‌العاده دیگر است که ZFS را تبدیل به انتخابی فوق‌العاده برای سیستم عامل کرده است. این اولین قسمت از مقاله های ZFS است که برای شما آماده کرده‌ایم و در آن به معرفی این فایل سیستم و ویژگی‌های آن و همچنین نجوه نصب آن بر روی سیستم عامل های لینوکسی و ساخت ZFS pool و دستورات ZFS zpool اشاره کرده ایم.

۱ – معرفی

در زیر برخی از قابلیت‌های این فایل سیستم را آورده‌ایم :

– محافظت در برابر خراب شدن اطلاعات

– پشتیبانی از فضاهای ذخیره سازی با حجم بالا

– فشرده‌سازی مؤثر و کارآمد اطلاعات

– گرفتن snapshot از فایل سیستم

– پشتیبانی از Raid Z

– بررسی سلامت فایل ها

– پشتیبانی و تعمیر خودکار nfsv4cl
ZFS به صورت رسمی برای sun microsystems و برای پلتفرم سولاریس توسعه یافته است و توسعه آن از سال ۲۰۱۰ شروع شد ؛ پس از آن اوراکل sun microsystems را تصاحب کرد و فایل سیستم ZFS را توسعه داد. با پایدار شدن ZFS این روزها این فایل سیستم در کامپیوتر های لینوکسی از محبوبیت بسیار زیادی برخوردار شده است به طوری که برای مثال اوبونتو وعده داده است که این فایل سیستم را از نسخه ۱۶٫۰۴ به توزیع اضافه کند.

پورت این فایل سیستم به لینوکس توسط Lawrence Livermore National Laboratory انجام گرفته است و این فایل سیستم در لینوکس به صورت یک ماژول کرنل است که میتوانید آن را دانلود ؛ کامپایل و نصب کنید و برای اینکار نیاز به پچ کردن و یا کامپایل کردن مجدد کرنل نخواهید داشت.

شما میتوانید پکیج سورس Zfs را از این لینک دریافت کنید

zfs-installing-logo
۲ – نصب ZFS در لینوکس

در این قسمت میخواهیم zfs را بر روی centOS سرور نصب کنیم. با این حال تمامی دستوراتی که اجرا میکنیم در سیستم عامل های دیگر هم جواب خواهند داد و عمده ترین تفاوت ممکن است در پیکج منیجر سیستم عامل باشد. اما دستورات Zfs در همه سیستم عامل ها مشابه است و از این جهت تفاوتی احساس نمیشود.

دستورات زیر را در centos وارد کنید تا zfs بر روی سیستم عامل نصب شود :

# yum localinstall --nogpgcheck https://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

# yum localinstall --nogpgcheck http://archive.zfsonlinux.org/epel/zfs-release.el6.noarch.rpm

# yum install kernel-devel zfs

 

در هنگام نصب مطمئن شوید همه پیش نیازها وجود دارند و به درستی نصب میشوند. خراب بودن یکی از وابستگی‌ها هم باعث تأثیر گذاشتن بر ادامه مراحل و نصب zfs خواهد شد. همچنین نیاز دارید تا کامپایلر gcc را نیز بر روی سیستم خود نصب کنید. قبل از نصب zfs کامپایلر gcc را بر روی سیستم خود نصب کنید.

سپس مطمئن شوید که تمامی ماژول های ZFS بر روی کرنل load شده باشند. برای اینکار از دستور lsmod استفاده کنید همانطوری که در زیر آن را به کار برده ایم :

# lsmod | grep zfs
zfs                  1188621  0
zcommon                45591  1 zfs
znvpair                81046  2 zfs,zcommon
zavl                    6900  1 zfs
zunicode              323051  1 zfs
spl                   264548  5 zfs,zcommon,znvpair,zavl,zunicode

 

 

ما در این سرور چندین دیسک را load کرده‌ایم تا قابلیت و قدرت ZFS را تست کنیم.

# ls -l /dev/sd*
brw-rw----. 1 root disk 8,  0 Jul 15 15:52 /dev/sda
brw-rw----. 1 root disk 8,  1 Jul 15 15:52 /dev/sda1
brw-rw----. 1 root disk 8,  2 Jul 15 15:52 /dev/sda2
brw-rw----. 1 root disk 8,  3 Jul 15 15:52 /dev/sda3
brw-rw----. 1 root disk 8, 16 Jul 16 10:57 /dev/sdb
brw-rw----. 1 root disk 8, 32 Jul 16 10:57 /dev/sdc
brw-rw----. 1 root disk 8, 48 Jul 16 10:58 /dev/sdd
brw-rw----. 1 root disk 8, 64 Jul 16 11:27 /dev/sde
brw-rw----. 1 root disk 8, 80 Jul 16 11:27 /dev/sdf

 

۳ – ساخت Zpool

دستورات zpool به شما کمک میکند تا فرآیند ذخیره سازی در استخر یا pool های Zfs را کانفیگ کنید. Pool های ذخیره سازی مجموعه‌ای از دستگاه‌ها هستند که ذخیره سازی فیزیکی را برای zfs ممکن میکنند.

دستور زیر یک zpool راه اندازی میکند :

# zpool create -f mypool raidz sdb sdc sdd sde sdf

در مثال بالا :

– create یک دستور برای ساخت pool است

– آپشن -f گزینه پارتیشن لیبل را رد میکند ؛ چرا که این پارتیشن ها جدید هستند

– raidz هم یک مرحله از raid است که منظور RAIDZ نیست و raid5 در اینجا استفاده می‌شود که کارآمدی بهتری را به ارمغان خواهد آورده‌
پس از آن وضعیت zpool هایی که ساخته‌ایم را بررسی میکنیم :

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

        NAME        STATE     READ WRITE CKSUM
        mypool      ONLINE       0     0     0
          raidz1-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
            sdf     ONLINE       0     0     0

errors: No known data errors

پس از اینکه pool ساخته شد اگر دستور df -h را وارد کنید خواهیم دید که pool های ساخته شده به صورت خودکار در mount point خود ماونت شده اند.

# df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/vglocal-rootlv   14G  2.4G   11G  18% /
tmpfs                       939M     0  939M   0% /dev/shm
/dev/sda1                   504M   46M  433M  10% /boot
mypool                      3.9G     0  3.9G   0% /mypool

 

zfs-self-healing-orig

۴ – ساخت pool های mirror شده

برای ساخت pool های mirror شده دستور create را با آپشن های معرفی شده در ادامه استفاده میکنیم. اگر یکی از دیسک ها در ذخیره اطلاعات به مشکل خود دیسک دیگر وظیفه ذخیره را انجام میدهد و مشکلی برای اطلاعات پیش نخواهد آمد. پس از اینکه دیسک خراب شده جایگزین شد اطلاعات دوباره mirror شده (به آن resilvering نیز میگویند) و سیستم کار خود را همچنان ادامه میدهد.

# zpool create -f mypool mirror sdb sdc mirror sdd sde

 

پس از آن وضعیت zpool میرور شده را چک کنید :

# zpool status -v
  pool: mypool
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        mypool      ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0

errors: No known data errors

 

۵ – import و export در zpool

اگر بخواهید pool های zfs را از سیستمی به سیستم دیگر وارد کنید این قابلیت به کمک شما خواهد آمد. فایل سیستم ZFS این کار را با export کردن pool از یک سیستم به سیستم دیگر انجام میدهد و سپس میتوانید آن را به سیستم مورد نظر import کنید. برای import و export کردن نیز میتوانید دو دستور زیر را به کار ببرید :

# zpool export mypool

# zpool import mypool

 

۶ – مشاهده I/O stat یک Zfs Pool

برای مشاهده I/O stat های یک pool میتوانید از دستور زی استفاده کنید که خروجی آن را نیز نمایش داده‌ایم :

# zpool iostat -v mypool
               capacity     operations    bandwidth
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
mypool       147K  4.95G      0      0     33    252
  mirror      54K  3.97G      0      0     10     84
    sdb         -      -      0      0    536    612
    sdc         -      -      0      0    282    612
  mirror      93K  1008M      0      0     23    168
    sdd         -      -      0      0    288    696
    sde         -      -      0      0    294    696
----------  -----  -----  -----  -----  -----  -----

 

۷ – پاک کردن یک ZFS pool

برای تخریب یک pool از دستور destroy به صورت زیر استفاده میکنیم :

# zpool destroy mypool

 

۸ – جاگزین کردن فایل‌های خراب شده و ناقص در ZFS pool

برای جاگزینی یک دیسک بعد از خراب شدن و یا از دست دادن آن از دستور زیر استفاده کنید :

# zpool replace mypool sde sdf

 

۹ – گسترش و توسعه یک ZFS Pool با دیسک جدید

برای توسعه یک Zfs Pool میتوانید از دستوری که در زیر قرار داده شده است استفاده کنید :

# zpool add -f mypool sde

 

۱۰ – اضافه کردن یک دیسک یدکی به ZFS Pool

شما میتوانید یک دیسک یدکی نیز یه zfs pool اضافه کنید که برای آن باید یک دستگاه مجزا به zfs pool متصل کنید. در قسمت‌هایی که دیسک fail می‌شود دستگاه یدکی و ادمین ماشین میتواند آن را در زمانی مناسب و بعداً با مورد سالم جاگزین کند. توجه داشته باشید که شما میتوانید حتی دستگاه‌های یدکی خود را نیز با چندین zfs pool به اشتراک بگذارید.

# zpool add -f mypool spare sde

 

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

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

اروند طباطبایی

بنیانگذار دیجی اسپارک: اولین مرجع تخصصی امبدد سیستم به زبان فارسی / کارشناس سئو و تولید محتوا

هرچه می آموزم میبینم که خیلی کم آموختم. علاقه به رباتیک و تکنولوژی دارم. امیدوارم بتونم دانشی را که آموخته‌ام، به روش‌های مختلفی به کاربران علاقمند منتقل کنم.

تبادل نظر و رفع عیب با ثبت دیدگاه