ZFS
به صورت رسمی برای sun microsystems و برای پلتفرم سولاریس توسعه یافته است و توسعه آن از سال ۲۰۱۰ شروع شد ؛ پس از آن اوراکل sun microsystems را تصاحب کرد و فایل سیستم ZFS را توسعه داد. با پایدار شدن ZFS این روزها این فایل سیستم در کامپیوتر های لینوکسی از محبوبیت بسیار زیادی برخوردار شده است به طوری که برای مثال اوبونتو وعده داده است که این فایل سیستم را از نسخه ۱۶٫۰۴ به توزیع اضافه کند.
پورت این فایل سیستم به لینوکس توسط Lawrence Livermore National Laboratory انجام گرفته است و این فایل سیستم در لینوکس به صورت یک ماژول کرنل است که میتوانید آن را دانلود ؛ کامپایل و نصب کنید و برای اینکار نیاز به پچ کردن و یا کامپایل کردن مجدد کرنل نخواهید داشت.
به صورت رسمی برای sun microsystems و برای پلتفرم سولاریس توسعه یافته است و توسعه آن از سال ۲۰۱۰ شروع شد ؛ پس از آن اوراکل sun microsystems را تصاحب کرد و فایل سیستم ZFS را توسعه داد. با پایدار شدن ZFS این روزها این فایل سیستم در کامپیوتر های لینوکسی از محبوبیت بسیار زیادی برخوردار شده است به طوری که برای مثال اوبونتو وعده داده است که این فایل سیستم را از نسخه ۱۶٫۰۴ به توزیع اضافه کند.
پورت این فایل سیستم به لینوکس توسط Lawrence Livermore National Laboratory انجام گرفته است و این فایل سیستم در لینوکس به صورت یک ماژول کرنل است که میتوانید آن را دانلود ؛ کامپایل و نصب کنید و برای اینکار نیاز به پچ کردن و یا کامپایل کردن مجدد کرنل نخواهید داشت.
ساخت Zpool
دستورات zpool به شما کمک میکند تا فرآیند ذخیره سازی در استخر یا pool های Zfs را کانفیگ کنید. Pool های ذخیره سازی مجموعهای از دستگاهها هستند که ذخیره سازی فیزیکی را برای zfs ممکن میکنند.
دستور زیر یک zpool راه اندازی میکند :
# zpool create -f mypool raidz sdb sdc sdd sde sdf
1
# 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 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
دستورات zpool به شما کمک میکند تا فرآیند ذخیره سازی در استخر یا pool های Zfs را کانفیگ کنید. Pool های ذخیره سازی مجموعهای از دستگاهها هستند که ذخیره سازی فیزیکی را برای zfs ممکن میکنند.
دستور زیر یک zpool راه اندازی میکند :
# zpool create -f mypool raidz sdb sdc sdd sde sdf
1
# 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 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
1
2
3
4
5
6
# 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
# 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
1
2
3
4
5
6
# 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
ساخت pool های mirror شده
برای ساخت pool های mirror شده دستور create را با آپشن های معرفی شده در ادامه استفاده میکنیم. اگر یکی از دیسک ها در ذخیره اطلاعات به مشکل خود دیسک دیگر وظیفه ذخیره را انجام میدهد و مشکلی برای اطلاعات پیش نخواهد آمد. پس از اینکه دیسک خراب شده جایگزین شد اطلاعات دوباره mirror شده (به آن resilvering نیز میگویند) و سیستم کار خود را همچنان ادامه میدهد.
برای ساخت 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
# 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
اگر بخواهید 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
—------— —--- —--- —--- —--- —--- —---
برای مشاهده 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
برای تخریب یک pool از دستور destroy به صورت زیر استفاده میکنیم :
# zpool destroy mypool
جاگزین کردن فایلهای خراب شده و ناقص در ZFS pool
برای جاگزینی یک دیسک بعد از خراب شدن و یا از دست دادن آن از دستور زیر استفاده کنید :
# zpool replace mypool sde sdf
برای جاگزینی یک دیسک بعد از خراب شدن و یا از دست دادن آن از دستور زیر استفاده کنید :
# zpool replace mypool sde sdf
گسترش و توسعه یک ZFS Pool با دیسک جدید
برای توسعه یک Zfs Pool میتوانید از دستوری که در زیر قرار داده شده است استفاده کنید :
# zpool add -f mypool sde
برای توسعه یک Zfs Pool میتوانید از دستوری که در زیر قرار داده شده است استفاده کنید :
# zpool add -f mypool sde
اضافه کردن یک دیسک یدکی به ZFS Pool
شما میتوانید یک دیسک یدکی نیز یه zfs pool اضافه کنید که برای آن باید یک دستگاه مجزا به zfs pool متصل کنید. در قسمتهایی که دیسک fail میشود دستگاه یدکی و ادمین ماشین میتواند آن را در زمانی مناسب و بعداً با مورد سالم جاگزین کند. توجه داشته باشید که شما میتوانید حتی دستگاههای یدکی خود را نیز با چندین zfs pool به اشتراک بگذارید.
# zpool add -f mypool spare sde
شما میتوانید یک دیسک یدکی نیز یه zfs pool اضافه کنید که برای آن باید یک دستگاه مجزا به zfs pool متصل کنید. در قسمتهایی که دیسک fail میشود دستگاه یدکی و ادمین ماشین میتواند آن را در زمانی مناسب و بعداً با مورد سالم جاگزین کند. توجه داشته باشید که شما میتوانید حتی دستگاههای یدکی خود را نیز با چندین zfs pool به اشتراک بگذارید.
# zpool add -f mypool spare sde
ایل سیستم zfs در لینوکس هر روز دارد جای خود را بیشتر باز میکند و در این سیستم عامل به رسمیت شناخته میشود. در zfs شما میتوانید فشردهسازی را تا مرحله filesystem پیش ببرید. در این مقاله توضیح میدهیم که چگونه از یک zfs storage pool فایل سیستم zfs خود را بسازیم و فشردهسازی را در آن فعال کنیم.
ایجاد فایل سیستم ZFS
ابتدا تمامی فایل سیستمهای ZFS ساخته شده را با دستور zfs list مشاهده میکنیم. همانظوری که در زیر نشان داده شده است ما یک فایل سیستم با مشخصات نمایش داده شده داریم :
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 296K 5.84G 30K /mypool
ابتدا تمامی فایل سیستمهای ZFS ساخته شده را با دستور zfs list مشاهده میکنیم. همانظوری که در زیر نشان داده شده است ما یک فایل سیستم با مشخصات نمایش داده شده داریم :
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 296K 5.84G 30K /mypool
حال یک فایل سیستم جدید را با دستور zfs create میسازیم :
# zfs create mypool/fs1
# zfs create mypool/fs1
همانطور که در زیر میبینیم فایل سیستم مورد نظرمان ساخته شده است :
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 170K 5.84G 30K /mypool
mypool/fs1 30K 5.84G 30K /mypool/fs1
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 170K 5.84G 30K /mypool
mypool/fs1 30K 5.84G 30K /mypool/fs1
نظیم ZFS qoute و ذخیره سازی ها
وقتی شما یک فایل سیستم بسازید به صورت پیشفرض تمامی فضای pool را اشغال خواهد کرد. پس شما باید یک qoute و همچنین ذخیره سازی معین برای آن مشخص کنید. برای تنظیم qoute از دستور zfs set z همانطور که در زیر آمده است استفاده کنید. در اینجا ما یک qouta به اندازه ۱ گیگابایت برای فایل سیستم خود درنظر گرفتهایم :
# zfs set quota=1G mypool/fs1
وقتی شما یک فایل سیستم بسازید به صورت پیشفرض تمامی فضای pool را اشغال خواهد کرد. پس شما باید یک qoute و همچنین ذخیره سازی معین برای آن مشخص کنید. برای تنظیم qoute از دستور zfs set z همانطور که در زیر آمده است استفاده کنید. در اینجا ما یک qouta به اندازه ۱ گیگابایت برای فایل سیستم خود درنظر گرفتهایم :
# zfs set quota=1G mypool/fs1
پس از آن باید مقدار reservation را برای فایل سیستم خود مشخص کنیم در این مثال fs1 فضای ۲۵۶ مگابایت را از کل ۵٫۵۹ گیگ رزرو کرده است و میتوانیم آن را تا ۱ گیگابایت که در qoute مشخص کردیم توسعه دهیم
# zfs set reservation=256M mypool/fs1
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 256M 5.59G 32.5K /mypool
mypool/fs1 30K 1024M 30K /mypool/fs1
# zfs set reservation=256M mypool/fs1
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 256M 5.59G 32.5K /mypool
mypool/fs1 30K 1024M 30K /mypool/fs1