Academy and Foundation unixmens | Your skills, Your future
2.28K subscribers
6.65K photos
1.36K videos
1.23K files
6K links
@unixmens_support
@yashar_esm
[email protected]
یک کانال علمی تکنولوژی
فلسفه متن باز-گنو/لینوکس-امنیت - اقتصاد
دیجیتال
Technology-driven -بیزینس های مبتنی بر تکنولوژی
Enterprise open source
ارایه دهنده راهکارهای ارتقای سازمانی - فردی - تیمی
Download Telegram
پاک کردن یک 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 شما میتوانید فشرده‌سازی را تا مرحله filesystem پیش ببرید. در این مقاله توضیح میدهیم که چگونه از یک zfs storage pool فایل سیستم zfs خود را بسازیم و فشرده‌سازی را در آن فعال کنیم.
ایجاد فایل سیستم ZFS

ابتدا تمامی فایل سیستم‌های ZFS ساخته شده را با دستور zfs list مشاهده میکنیم. همانظوری که در زیر نشان داده شده است ما یک فایل سیستم با مشخصات نمایش داده شده داریم :
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 296K 5.84G 30K /mypool
حال یک فایل سیستم جدید را با دستور zfs create میسازیم :
# 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 qoute و ذخیره سازی ها

وقتی شما یک فایل سیستم بسازید به صورت پیشفرض تمامی فضای 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
ساخت یک mount point قابل تعویض برای فایل سیستم

در هنگام مانت کردن آن با دستور mypool/fs1 شما میتوانید یک نقطه اتصال یا mount point جایگزین نیز به آن بدهید و هر اسمی که برای آن دوست دارید قرار دهید. برا مثال دستور زیر mount point را /testmnt به جای مورد قبلی قرار میدهد :
# zfs set mountpoint=/testmnt mypool/fs1
همانطور که در زیر میبینیم اول سطر مربوط به اسمی است که خود فایل سیستم دارد و در سطر دوم اسم جایگزینی که برای آن انتخاب کردیم قرار داده شده است :
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 256M 5.59G 32.5K /mypool
mypool/fs1 30K 1024M 30K /testmnt
و هنگامی که دستور df را وارد کنیم میبینیم که mount point جایگزینی که به آن داده‌ایم نمایش داده میشود.
# df -h
Filesystem Size Used Avail Use% Mounted on
..
mypool 5.6G 128K 5.6G 1% /mypool
mypool/fs1 1.0G 128K 1.0G 1% /testmnt
فعال کردن فشرده‌سازی در فایل سیستم zfs

برای فعال کردن فشرده‌سازی داده‌ها بر روی zfs میتوانید همانطوری که در زیر نشان داده شده است میزان فشرده‌سازی را مشخص کنید. هنگامی که این ویژگی تنظیم شد هر فایل حجیم که در این فایل سیستم ذخیر شود به صورت اتوماتیک فشرده خواهد شد.
# zfs set compression=lzjb mypool/fs1
موارد زیر از گزینه های فشرده‌سازی هستند که میتوانید استفاده کنید :
on
off
lzjb
gzip
gzip[1-9]
zle
همچنین میتوانید فشرده‌سازی را بر روی یک فایل سیستم که از قبل ساخته شده نیز فعال کنید. در اینجا فشرده‌سازی فقط برای فایل‌های بزرگ و فایل‌هایی که ویرایش می‌شوند انجام می‌شود و اطلاعات موجود بر روی فایل سیستم به صورت فشرده نشده رها خواهند شد.
بررسی فشرده‌سازی Zfs

در مثال زیر ما یک فایل rar با حجم ۶۱ مگابایت را بر روی فایل سیستم کپی کردیم :
# ls -lh /testmnt/test.tar
-rw-r--r--. 1 root root 61M Nov 11 09:44 /testmnt/test.tar
اگر نگاهی به جزئیات بیاندازیم سایز مصرفی این فایل تنها ۲۰٫۹ مگابایت شده است که نشان دهنده روشن بودن و کارکردن روش فشرده‌سازی مخصوص است.
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 256M 5.59G 32.5K /mypool
mypool/fs1 20.9M 1003M 20.9M /testmnt
شما همچنین میتوانید ضریب فشرده یازی را نیز با دستور زیر مشاهده کنید :
# zfs get compressratio mypool/fs1
NAME PROPERTY VALUE SOURCE
mypool/fs1 compressratio 2.90x -
جدای از قابلیت‌های فشرده‌سازی که در فایل سیستم zfs مشاهده می‌شود قابلیت‌های بیشمار دیگری نیز وجود دارد که برای همگان جالب خواهد بود.
فایل سیستم Btrfs
#btrfs

Btrfs یا B-tree Filesystem یک فایل سیستم متن باز مبتنی بر مجوز GPL است که توسط شرکت هایی چون لینوکس فاندیشن، فیسبوک، اینتل، فوجیتسو، ردهت، اوراکل، سوزه و … توسعه داده می شود.

این فایل سیستم دیسک‌های با ظرفیت حداکثر ۱۶ اگزابایت و فایل‌های با اندازه حداکثر ۸ اگزابایت را پشتیبانی می‌کند.

برای نامگذاری فایل‌های ایجاد شده روی این فایل سیستم تقریباً می‌توان از هر کاراکتری جز ‘/’ و NULL استفاده نمود.

برخی ‌از ویژگی‌های مهم Btrfs عبارتند از:

یکپارچه سازی دیسک (Defragmention) به‌صورت آنلاین
تغییر اندازه پارتیشن ها (Volume) به‌صورت آنلاین
حدف یا اضافه نمودن دیسک های سخت به‌صورت آنلاین
بررسی فایل سیستم (Fsck) به‌صورت آفلاین
بررسی فایل‌ها و برطرف نمودن خودکار مشکلات آن‌ها به‌صورت آنلاین (Data Scrubbing)
پشتیبانی از RAID0 , RAID1, RAID10
پشتیبانی از Subvolume ها
فشرده سازی (Transparent Compression)
بررسی Checksum روی داده‌ها و Metadata
و …

Btrfs در اکثر توزیع‌های معروف به‌صورت پیش‌فرض پشتیبانی می‌شود و برای استفاده از آن فقط می‌بایست ابزارهای مربوط به آن را در توزیع خود نصب کنیم.

برای نصب در سیستم‌های مبتنی بر دبیان:

apt install btrfs-tools

برای نصب در سیستم‌های مبتنی بر ردهت:

yum install btrfs-progs

یکی از خصوصیات جالب Btrfs این است که شما می‌توانید فایل سیستم را روی یک یا چند دیسک خام و پارتیشن‌بندی‌نشده ایجاد کنید. برای مثال نیازی به استفاده از ابزارهایی همچون fdisk برای پارتیشن بندی نیست.

برای مثال برای ایجاد فایل سیستم Btrfs بر روی سه دیسک sdb, sdc, sdd دستور زیر را وارد می کنیم:

mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd

پس از اجرای دستور فوق خروجی بصورت زیر خواهد بود:

Btrfs v3.17
See https://btrfs.wiki.kernel.org for more information.

Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
adding device /dev/sdc id 2
adding device /dev/sdd id 3
fs created label (null) on /dev/sdb
nodesize 16384 leafsize 16384 sectorsize 4096 size 24.00GiB

نکته) در صورتی که دستور mkfs.btrfs رو بدون هیچ سوییچ و همراه با چند دیسک به‌کار ببریم به‌صورت پیش‌فرض از RAID0 (Stripe)برای ذخیره سازی داده‌ها و از (Mirror) RAID1 برای ذخیره‌سازی Metadata استفاده می‌شود. مزییت این روش در این است که علاوه بر بهبود سرعت خواندن و نوشتن داده‌ها در صورتی که یکی از دیسک‌ها دچار مشکل شود به کمک Metadata می‌توانیم داده‌های از دست رفته را بازسازی کنیم.

اگر مایل هستید که btrfs رو تنها روی یک دیسک ایجاد کنید و یا مایل نیستید که Data و Metadata بصورت RAID ذخیره سازی شود می‌توانید از سوییچ m- بصورت زیر استفاده نمایید:

mkfs.btrfs -m single /dev/sdb

همچنین در صورتی که بخواهید همین کار را با چندین دیسک انجام دهید نیز می‌توانید به‌صورت زیر عمل نمایید:

mkfs.btrfs -m raid0 /dev/sdb /dev/sdc /dev/sdd

که در مثال فوق برای ذخیره‌سازی Metadata از RAID0 (Stripe) بجای RAID1 (گزینه پیشفرض) استفاده می گردد.

همچنین می‌توانیم نحوه ذخیره‌سازی Data و Metadata را به دلخواه خودمان تعریف کنیم. برای مثال:

mkfs.btrfs -m raid0 -d raid1 /dev/sdb /dev/sdc /dev/sdd

که در مثال فوق توسط سوییچ‌های m- و d- نحوه ذخیره‌سازی مشخص گردیده است.

نکته) می‌توانیم از RAID10 نیز برای ذخیره‌سازی Data و Metadata استفاده کنیم اما می‌بایست توجه داشته باشید که برای استفاده از RAID10 حداقل به ۴ دیسک نیاز است.

برای مشاهده وضعیت فایل سیستم ایجاد شده دستور زیر را وارد می کنیم:

btrfs filesystem show /dev/sdb

نکته) از آنجایی که در مثال فوق برای نشان دادن قابلیت‌های RAID در Btrfs از 3 دیسک استفاده نمودیم بنابراین برای نمایش اطلاعات فایل‌سیستم توسط دستور فوق هیچ فرقی نمی‌کند که نام کدام دیسک را اعلام کنیم چرا که هر 3 دیسک مربوط به یک فایل سیستم و در قالب یک Pool می‌باشد.

که خروجی آن به‌صورت زیر خواهد بود:

Label: none uuid: f36e0a56-bcea-4637-a1e4-c9788574d84a
Total devices 3 FS bytes used 112.00KiB
devid 1 size 8.00GiB used 1.82GiB path /dev/sdb
devid 2 size 8.00GiB used 827.19MiB path /dev/sdc
devid 3 size 8.00GiB used 1.81GiB path /dev/sdd

Btrfs v3.17

پس از ایجاد فایل سیستم می‌توانیم به راحتی و توسط دستور زیر انرا Mount نماییم:

mount /dev/sdb /mnt

برای مشاهده فضای مصرفی و فضای باقی‌مانده فایل سیستم دستور زیر را وارد می کنیم:

btrfs filesystem df /mnt

که خروجی آن به‌صورت زیر خواهد بود:
Data, RAID0: total=2.40GiB, used=832.00KiB
Data, single: total=8.00MiB, used=0.00B
System, RAID1: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00B
Metadata, RAID1: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00B
GlobalReserve, single: total=16.00MiB, used=0.00B

یکی از ویژگی‌های Btrfs قابلیت فشرده‌سازی داده‌ها می‌باشد که موجب می‌شود داده‌ها به‌صورت فشرده‌شده روی دیسک ذخیره شوند که موجب صرفه‌جویی در مصرف فضای دیسک می‌گردد. Btrfs از دو متد فشرده‌سازی zlib و lzo برای فشرده‌سازی استفاده می‌کند.

نکته) Btrfs بصورت پیش‌فرض از zlib برای فشرده‌سازی استفاده می کند.

برای فعال نمودن قابلیت فشرده‌سازی کافی است که دیسک مورد نظر را بصورت زیر Mount کنیم:

mount -o compress=lzo /dev/sdb /mnt

یا

mount -o compress=zlib /dev/sdb /mnt

یا

mount -o compress /dev/sdb /mnt

که دستور اول با استفاده از lzo و در دستور دوم با استفاده از zlib اقدام به فشرده‌سازی داده‌ها می کند. در دستور سوم هم از گزینه پیشفرض (zlib) برای فشرده‌سازی استفاده می‌شود.

نکته) زمانی که یک دیسک را با قابلیت فشرده‌سازی Mount می‌کنید توجه داشته باشید که تنها داده‌هایی که از آن پس در دیسک ذخیره خواهند شد فشرده می گردند.

از دیگر ویژگی‌های Btrfs امکان تغییر حجم Volume ها به‌صورت آنلاین می باشد. به‌عنوان مثال دستور زیر مقدار 2G از فضای فایل سیستم mnt/ می کاهد.

btrfs filesystem resize -2g /mnt

و دستور زیر مقدار 500M به فضای فایل سیستم mnt/ اضافه می‌کند.

btrfs filesystem resize +500m /mnt

برای اضافه نمودن دیسک جدید به فایل‌سیستم مورد نظرمان به‌صورت زیر عمل می کنیم.

btrfs device add /dev/sde /mnt

سپس دستور زیر را جهت مشاهده وضعیت فایل‌سیستم وارد می کنیم.

btrfs filesystem show /dev/sdb

که خروجی آن به‌صورت زیر خواهد بود.

Label: none uuid: f36e0a56-bcea-4637-a1e4-c9788574d84a
Total devices 4 FS bytes used 960.00KiB
devid 1 size 8.00GiB used 1.82GiB path /dev/sdb
devid 2 size 8.00GiB used 827.19MiB path /dev/sdc
devid 3 size 8.00GiB used 1.81GiB path /dev/sdd
devid 4 size 8.00GiB used 0.00B path /dev/sde

Btrfs v3.17

همان‌طور که مشاهده می‌کنید دیسک sde به فایل‌سیستم اضافه شد با این حال در حال حاضر از فضای آن استفاده نمی‌شود. برای اینکه بتوان از فضای دیسک جدید هم استفاده نمود می‌بایست دستور زیر را وارد کنیم.

btrfs filesystem balance /mnt

که پس از اجرای دستور فوق خروجی به شکل زیر خواهد بود.

Done, had to relocate 6 out of 6 chunks

برای حذف یک دیسک از فایل سیستم دستور زیر را وارد می‌کنیم.

btrfs device delete /dev/sdc /mnt

در صورتی که بخواهیم RAID Level را برای فایل سیستم ایجاد شده تغییر دهیم می‌توانیم به‌صورت زیر عمل کنیم.

btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt

یکی دیگر از قابلیت‌های جالب در btrfs مفهومی به نام Subvolume است. در btrfs می‌توانیم در هر فایل سیستم Subvolume هایی ایجاد کنیم و سپس از این Subvolume ها Snapshot بگیریم و یا آن‌ها را به‌صورت مستقل از فایل سیستم اصلی Mount کنیم.

برای ایجاد یک Subvolume دستور زیر را وارد می کنیم.

btrfs subvolume create /mnt/sv1

در مثال فوق یک Subvolume با نام sv1 در فایل سیستم mnt/ ایجاد گردید.

برای نمایش وضعیت Subvolume ها در فایل سیستم mnt/ دستور زیر را وارد می کنیم.

btrfs subvolume list /mnt

که خروجی آن به‌صورت زیر خواهد بود.

ID 272 gen 136 top level 5 path sv1

همانطور که مشاهده می‌کنید هر Subvolume یک ID منحصر به فرد دارد که به آن Subvolume اشاره می‌کند.

همچنین می‌توانیم یک Subvolume را درون Subvolume دیگری ایجاد کنیم.

btrfs subvolume create /mnt/sv1/sv2

برای Mount نمودن یک Subvolume به‌صورت زیر عمل می کنیم:

ابتدا می‌بایست فایل‌سیستم اصلی را در صورتی که Mount می‌باشد Unmount کنیم.

umount /mnt

و سپس توسط دستور زیر و به وسیله Subvolume ID آن را به‌صورت زیر Mount می کنیم.

mount -o subvolid=272 /dev/sdb /mnt

که در اینجا Subvolume ID مورد نظر ما 266 است. همچنین می‌توانیم به جای استفاده از ID از نام Subvolume استفاده کنیم.

mount -o subvol=sv1 /dev/sdb /mnt

نکته)‌ ID مربوط به Volume ریشه همواره 0 است.

برای تغییر Default Volume در زمان Mount می‌توانیم به‌صورت زیر عمل کنیم.

btrfs subvolume set-default 266 /mnt

از این پس هنگام Mount نمودن فایل‌سیستم، به جای Volume ریشه Subvolume مشخص شده به‌صورت پیشفرض Mount می‌گردد.

برای حدف یک Subvolume دستور زیر را وارد می کنیم.

btrfs subvolume delete /mnt/sv1
دستور فوق Subvolume با نام sv1 را حذف می کند.

یکی دیگر از امکانات مفید btrfs امکان تهیه Snapshot از Subvolume ها به‌صورت آنلاین است. توسط Snapshot ها می‌توانیم از Data های ذخیره شده در Subvolume ها کپی پشتیبان تهیه کنیم تا در مواقع لزوم Data ها را به حالت اولیه بازگردانیم.

برای تهیه Snapshot دستور زیر را وارد می‌کنیم.

btrfs subvolume snapshot /mnt/sv1 /mnt/sv1_snapshot

توسط دستور فوق یک Snapshot با نام sv1_snapshot از sv1 تهیه شد.

سپس می‌توانیم این Snapshot را در مواقع لزوم مستقیماً Mount کنیم و از اطلاعات ذخیره شده استفاده کنیم.

mount -o subvol=sv1_snapshot /dev/sdb /mnt

برای یکپارچه‌سازی (Defragment) فایل سیستم دستور زیر را وارد می کنیم.

btrfs filesystem defrag /mnt

همچنین می توانیم توسط دستور زیر فایل‌سیستم را با قابلیت یکپارچه‌سازی خودکار Mount کنیم.

mount -o autodefrag /dev/sdb /mnt
کانالی در حوزه اپن سورس ، گنو/لینوکس ، امنیت و ... دوست داشتین عضو بشین یا به دیگران معرفی کنید
@unixmens
😁1