mfsmodifysclass(1) این بخشی از MooseFS است mfsmodifysclass(1)

mfsmodifysclass - ویرایش و به‌روزرسانی مشخصات کلاس ذخیره‌سازی در MooseFS

mfsmodifysclass [-?] [-M نقطه_اتصال] [-c توضیحات] [-p اولویت] [-g گروه_صادرات] [-a فقط_مدیر] [-m حالت_برچسب‌ها] [-o حالت_آرشیو] [-C برچسب‌های_ایجاد] [-K برچسب‌های_نگهداری] [-A برچسب‌های_آرشیو] [-d تاخیر_آرشیو] [-s حداقل_طول_فایل] [-T برچسب‌های_سطل_زباله] [-t حداقل_زمان_ماندگاری_در_زباله‌دان] نام_کلاس_ذخیره‌سازی...

دستور mfsmodifysclass گزینه‌ها و مشخصات مشخص‌شده را در یک یا چند کلاس ذخیره‌سازی که با پارامتر(های) نام_کلاس_ذخیره‌سازی تعیین شده‌اند، تغییر داده و به‌روزرسانی می‌کند.

کلاس‌های ذخیره‌سازی برای تعریف سیاست افزونگی (Redundancy Policy) درون کلاستر به کار می‌روند. این کلاس‌ها بعداً می‌توانند از طریق ابزارهای mfssclass (نگاه کنید به mfssclass(1)) بر روی اشیاء خاص MooseFS (فایل‌ها یا پوشه‌ها) اعمال شوند.

کلاس ذخیره‌سازی مجموعه‌ای نام‌گذاری‌شده از عبارت‌های برچسب (Labels Expressions) و گزینه‌های پیکربندی دیگر است. عبارت برچسب مشخص‌کننده قالب افزونگی، سطح افزونگی مورد نظر و سیاست ذخیره‌سازی دلخواه است.

قالب افزونگی می‌تواند به صورت رونوشت‌های کامل (Copies) یا کدگذاری حذفی (Erasure-Coding یا EC) باشد.

سطح افزونگی بسته به قالب افزونگی مشخص‌شده، یا تعداد رونوشت‌ها (از ۱ تا ۹) است یا تعداد بخش‌های داده به‌علاوه بخش‌های پاریتی (4+n یا 8+n).

سیاست ذخیره‌سازی از طریق استفاده از برچسب‌ها مشخص می‌کند که کدام سرورهای قطعه (Chunkservers) باید برای ذخیره‌سازی فیزیکی داده‌های تخصیص‌یافته به یک کلاس ذخیره‌سازی خاص استفاده شوند.

این ابزار متعلق به مجموعه ابزارهای مدیریت کلاس‌های ذخیره‌سازی در MooseFS است که شامل ابزارهای زیر می‌باشد:

mfscreatesclass یک کلاس ذخیره‌سازی جدید با گزینه‌های داده‌شده ایجاد می‌کند.

mfsmodifysclass گزینه‌های داده‌شده را در یک یا چند کلاس ذخیره‌سازی موجود تغییر می‌دهد.

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

mfsclonesclass یک رونوشت جدید از یک کلاس ذخیره‌سازی با نامی دیگر ایجاد می‌کند.

mfsrenamesclass نام یک کلاس ذخیره‌سازی را تغییر می‌دهد.

mfslistsclass فهرست کلاس‌های ذخیره‌سازی موجود را نمایش می‌دهد.

mfsimportsclass تعاریف کلاس‌های ذخیره‌سازی را از ورودی استاندارد یا یک فایل وارد کرده و ایجاد می‌کند.

-C پارامتر اختیاری؛ به سیستم اعلام می‌کند که پس از ایجاد قطعه، داده‌ها ابتدا باید روی کدام سرورهای قطعه (تعریف‌شده با عبارت برچسب‌های_ایجاد) نوشته شوند. اگر این پارامتر برای یک کلاس مشخص نشود، از سرورهای قطعه برچسب‌های_نگهداری استفاده خواهد شد.

-K پارامتر مشخص‌کننده سرورهای قطعه با عبارت برچسب‌های_نگهداری که قطعات باید همواره روی آن‌ها نگهداری شوند، به جز در شرایط خاص مانند ایجاد، آرشیو و حذف (انتقال به سطل زباله)، در صورتی که تعریف شده باشند.

-A پارامتر اختیاری؛ به سیستم اعلام می‌کند که قطعات برای مقاصد آرشیو باید روی کدام سرورهای قطعه (تعریف‌شده با عبارت برچسب‌های_آرشیو) نگهداری شوند. سیستم زمانی یک قطعه را به عنوان آرشیو در نظر می‌گیرد که زمان atime/mtime/ctime (تعیین‌شده توسط -o) فایلی که به آن تعلق دارد، قدیمی‌تر از تعداد ساعات مشخص‌شده با گزینه -d باشد؛ همچنین بخش رفتار آرشیو را در زیر ببینید.

-d پارامتر اختیاری؛ مشخص می‌کند پس از چه مدت زمان از atime/mtime/ctime (تعیین‌شده توسط -o) یک فایل (و قطعات آن) به عنوان آرشیو تلقی شوند؛ حداقل واحد ساعت است (پیش‌فرض ۲۴)، برای قالب‌بندی مقدار به بخش زمان مراجعه فرمایید.

-o پارامتر اختیاری؛ فلگ‌های آرشیو را تعیین می‌کند: C - زمان ctime، M - زمان mtime، A - زمان atime، R - حالت برگشت‌پذیر (Reversible)، F - حالت سریع (Fastmode)، P - حالت مبتنی بر هر قطعه (Per Chunk)؛ حالت پیش‌فرض C است؛ برای جزئیات به بخش رفتار آرشیو در ادامه مراجعه فرمایید.

-s پارامتر اختیاری؛ حداقل طول فایل به بایت را که می‌تواند آرشیو شود تعیین می‌کند؛ پیش‌فرض ۰ است.

-T پارامتر اختیاری؛ به سیستم اعلام می‌کند که قطعات فایل‌های موجود در سطل زباله (Trash) باید روی کدام سرورهای قطعه (تعریف‌شده با عبارت برچسب‌های_سطل_زباله) نگهداری شوند؛ گزینه -t را نیز ببینید.

-t پارامتر اختیاری؛ مشخص می‌کند چه مقدار از زمان ماندگاری در سطل زباله باید باقی مانده باشد تا سیستم الگوی تعریف‌شده در -T را برای یک قطعه اعمال کند؛ حداقل واحد ساعت است (پیش‌فرض ۰)، برای قالب‌بندی مقدار به بخش زمان مراجعه فرمایید.

-c پارامتر اختیاری؛ توضیحات کلاس ذخیره‌سازی را برای راحتی کاربر تعریف می‌کند (یک رشته متنی، حداکثر طول ۲۵۵ بایت).

-p پارامتر اختیاری؛ اولویت کلاس را تعیین می‌کند؛ مقدار پیش‌فرض ۰ است، بخش اولویت کلاس‌های ذخیره‌سازی را ببینید.

-g پارامتر اختیاری؛ گروه صادرات (Export Group) کلاس را تعیین می‌کند؛ مقادیر مجاز ۰ تا ۱۵ هستند و مقدار پیش‌فرض ۰ است؛ برای توضیحات بیشتر به mfsexport.cfg(5) مراجعه کنید.

-a می‌تواند مقدار ۱ یا ۰ داشته باشد و مشخص می‌کند که آیا کلاس ذخیره‌سازی در دسترس همگان است (۰) یا فقط برای مدیر سیستم مجاز است (۱).

-m حالت برچسب مورد استفاده؛ مقادیر مجاز عبارتند از l (یا L، loose، Loose، LOOSE) برای حالت آزاد یا انعطاف‌پذیر (LOOSE)، d (یا D، std، Std، STD) برای حالت استاندارد (STANDARD)، و s (یا S، strict، Strict، STRICT) برای حالت سخت‌گیرانه (STRICT)؛ اگر حالتی تعریف نشود، حالت STANDARD در نظر گرفته می‌شود؛ رفتار حالت‌های برچسب در بخش حالت‌های برچسب در ادامه توضیح داده شده است.

-M نقطه اتصال MooseFS؛ در صورتی که دستور درون یک دایرکتوری مانت‌شده از MooseFS اجرا شود یا MooseFS در مسیر /mnt/mfs/ متصل شده باشد، نیازی به ذکر این پارامتر نیست.

-? پیام کوتاه راهنما و نحوه استفاده را نمایش می‌دهد.

برچسب‌ها حروف الفبای انگلیسی (A-Z - ۲۶ حرف) هستند که می‌توانند به سرورهای قطعه (Chunkservers) اختصاص داده شوند. هر سرور قطعه می‌تواند چندین برچسب (حداکثر ۲۶ برچسب) داشته باشد. برچسب‌ها در فایل mfschunkserver.cfg تعریف می‌شوند؛ برای اطلاعات بیشتر به صفحه راهنمای مربوطه مراجعه فرمایید.

یک عبارت برچسب مجموعه‌ای از زیرعبارت‌ها است که با کاما از هم جدا شده‌اند. برای رونوشت‌های کامل (Copies)، هر زیرعبارت الگوی ذخیره‌سازی یک رونوشت از فایل را مشخص می‌کند. یک زیرعبارت می‌تواند یک ستاره (*) یا یک الگوی برچسب باشد. الگوی برچسب می‌تواند یک برچسب منفرد یا عبارتی شامل جمع (+)، ضرب، نقیض (!) و پرانتز باشد. جمع بدین معناست که فایل می‌تواند روی هر سرور قطعه‌ای که با هر یک از عناصر جمع مطابقت دارد ذخیره شود (OR منطقی). ضرب بدین معناست که فایل فقط روی سرور قطعه‌ای ذخیره می‌شود که با همه عناصر مطابقت دارد (AND منطقی). ستاره به معنی هر سرور قطعه‌ای است. نقیض یعنی هر سرور قطعه‌ای به جز آن‌هایی که با زیرعبارت نفی‌شده مطابقت دارند. زیرعبارت‌های یکسان را می‌توان با افزودن یک عدد در جلوی آن‌ها خلاصه کرد، به جای این‌که چندین بار تکرار شوند.

برای کدگذاری حذفی (EC)، عبارت برچسب با علامت @ آغاز می‌شود، سپس تعداد بخش‌های داده، علامت + و عددی که بیانگر تعداد بخش‌های پاریتی (افزونه) قطعه است قرار می‌گیرد. تعداد مجاز بخش‌های داده 4 یا 8 است. تعداد مجاز بخش‌های پاریتی 1 (در نسخه جامع CE) یا 1 تا 9 (در نسخه PRO) می‌باشد. بنابراین برای نمونه، @4+1 به معنی EC با ۴ بخش داده و ۱ بخش پاریتی است، و @8+3 به معنی EC با ۸ بخش داده و ۳ بخش پاریتی می‌باشد. اگر تعداد بخش‌های داده حذف شود، مستر از مقدار پیش‌فرض تعریف‌شده توسط DEFAULT_EC_DATA_PARTS استفاده می‌کند (نگاه کنید به mfsmaster.cfg(5)). در این حالت @2 به معنی @8+2 یا @4+2 خواهد بود. سپس حداکثر دو زیرعبارت جداشده با کاما می‌توانند بیایند. اگر فقط یک زیرعبارت بیاید، تعیین می‌کند که تمام بخش‌ها کجا نگهداری شوند. اگر هر دو زیرعبارت وجود داشته باشند، زیرعبارت اول محل نگهداری بخش‌های داده و زیرعبارت دوم محل نگهداری بخش‌های پاریتی را مشخص می‌کند.

عبارت برچسب می‌تواند یک عبارت برچسب معمولی یا عبارت برچسب EC باشد (یعنی عبارت برچسب EC نمی‌تواند به عنوان یک زیرعبارت در رونوشت‌های معمولی قرار گیرد). عبارت برچسب EC فقط می‌تواند به جای ARCH_LABELS یا TRASH_LABELS در تعریف کلاس ذخیره‌سازی استفاده شود، اما عبارت‌های برچسب معمولی در هر کجایی قابل استفاده هستند.

در انتهای هر عبارت برچسب، می‌توان یک یا دو اطلاعات تکمیلی افزود که با جداکننده‌ای ویژه تفکیک می‌شوند. نخستین پسوند ممکن، پسوند تمایز (Distinguish) با جداکننده اسلش (/) است. دومین پسوند، لغو حالت برچسب (Labels Mode Override) با جداکننده دو‌نقطه (:) می‌باشد.

پسوند تمایز می‌تواند فهرستی از برچسب‌ها یا یکی از رشته‌های ویژه زیر باشد:

[IP] یا [I] - تمایز بر اساس شماره IP

[RACK] یا [R] - تمایز بر اساس رک (RACK)، طبق تعریف در توپولوژی (نگاه کنید به mfstopology.cfg(5))

در صورت وجود، بخش تمایز به سیستم اعلام می‌کند که باید سعی کند رونوشت‌های کامل را طوری توزیع کند که هر رونوشت روی برچسب متفاوتی از فهرست یا روی سرور قطعه‌ای با آدرس IP متفاوت یا از یک رک متفاوت قرار گیرد. برای EC بخش تمایز فعلاً نادیده گرفته می‌شود.

توجه! اگر CHUNKS_UNIQUE_MODE در mfsmaster.cfg روی مقداری غیر از ۰ تنظیم شده باشد، هرگونه تنظیم تمایز در کلاس‌های ذخیره‌سازی را بازنویسی خواهد کرد. برای اطلاعات بیشتر در مورد این پارامتر به راهنمای mfsmaster.cfg(5) مراجعه کنید.

پسوند لغو حالت برچسب می‌تواند یکی از سه کاراکتر باشد: d (یا D یا به صورت رشته‌ای std یا Std یا STD)، s (یا S یا به صورت رشته‌ای strict یا Strict یا STRICT)، یا l (یا L یا به صورت رشته‌ای loose یا Loose یا LOOSE) و این بدین معناست که به ترتیب حالت‌های برچسب STANDARD، STRICT یا LOOSE فقط بر روی همین یک عبارت برچسب اعمال شوند. برای توضیحات در مورد حالت‌های برچسب به بخش حالت‌های برچسب مراجعه فرمایید.

یک یا هر دو پسوند می‌توانند برای هر عبارت برچسب وجود داشته باشند، هر کدام باید با جداکننده مربوط به خود شروع شوند و در صورت حضور هر دو، ترتیب باید حفظ شود؛ یعنی ابتدا پسوند تمایز و سپس پسوند حالت برچسب قرار گیرد.

نمونه‌هایی از عبارت‌های برچسب:

A,B - فایل‌ها دارای ۲ رونوشت خواهند بود؛ یک رونوشت روی سرور(های) قطعه با برچسب A و دیگری روی سرور(های) قطعه با برچسب B ذخیره می‌شود.

A,* - فایل‌ها دارای ۲ رونوشت خواهند بود؛ یک رونوشت روی سرور(های) با برچسب A و دیگری روی هر سرور قطعه‌ای ذخیره می‌شود.

A,!A - فایل‌ها دارای ۲ رونوشت خواهند بود؛ یک رونوشت روی سرور(های) با برچسب A و دیگری روی هر سرور قطعه‌ای که فاقد برچسب A باشد ذخیره می‌شود.

*,* - فایل‌ها دارای ۲ رونوشت خواهند بود که روی هر سرور قطعه‌ای (متفاوت برای هر رونوشت) ذخیره می‌شوند.

AB,C+D+E - فایل‌ها دارای ۲ رونوشت خواهند بود؛ یک رونوشت روی سرورهایی که هر دو برچسب A و B را دارند (ضرب برچسب‌ها)، و رونوشت دیگر روی سرورهایی که دست‌کم یکی از برچسب‌های C یا D یا E را دارند (جمع برچسب‌ها) ذخیره می‌شود.

A,B[X+Y],C[X+Y] - فایل‌ها دارای ۳ رونوشت خواهند بود؛ رونوشت اول روی سرورهایی با برچسب A، رونوشت دوم روی سرورهایی با برچسب B و یکی از برچسب‌های X یا Y، و رونوشت سوم روی سرورهایی با برچسب C و یکی از برچسب‌های X یا Y ذخیره می‌شود.

عبارت 2A معادل عبارت A,A است.

عبارت A,3BC معادل عبارت A,BC,BC,BC است.

عبارت 2 معادل عبارت 2* و معادل عبارت *,* است.

3*/[IP] - فایل‌ها دارای ۳ رونوشت خواهند بود و هر رونوشت روی یک سرور قطعه با آدرس IP متفاوت نگهداری می‌شود.

A,B/[RACK] - فایل‌ها دارای ۲ رونوشت خواهند بود؛ یک رونوشت روی سرورهایی با برچسب A و رونوشت دیگر روی سرورهایی با برچسب B در رکی متفاوت از رونوشت دیگر ذخیره می‌شود.

S,H,H/ABX-Z - فایل‌ها دارای ۳ رونوشت خواهند بود؛ یکی روی سرور با برچسب S و دو تا روی سرورهایی با برچسب H، اما هر رونوشت روی سروری با برچسب متفاوت از مجموعه A، B، X، Y، Z قرار خواهد گرفت.

@4+1 - فایل‌ها در قالب EC با ۴ بخش داده و ۱ بخش پاریتی نگهداری می‌شوند.

@8+3 - فایل‌ها در قالب EC با ۸ بخش داده و ۳ بخش پاریتی نگهداری می‌شوند.

@2 - فایل‌ها در قالب EC با تعداد پیش‌فرض بخش‌های داده و ۲ بخش پاریتی نگهداری می‌شوند.

@4+3,Z - فایل‌ها در قالب EC با ۴ بخش داده و ۳ بخش پاریتی همگی روی سرورهایی با برچسب Z نگهداری می‌شوند.

@2,A(X+Y) - فایل‌ها در قالب EC با تعداد پیش‌فرض بخش‌های داده و ۲ بخش پاریتی، همگی روی سرورهایی با برچسب A و یکی از برچسب‌های X یا Y نگهداری می‌شوند.

@3,S,H - فایل‌ها در قالب EC نگهداری می‌شوند؛ تعداد پیش‌فرض بخش‌های داده روی سرورهایی با برچسب S و ۳ بخش پاریتی روی سرورهایی با برچسب H نگهداری خواهند شد.

AB,AC:l - فایل‌ها در قالب رونوشت نگهداری می‌شوند؛ یک رونوشت روی سروری با برچسب‌های A و B، رونوشت دوم روی سروری با برچسب‌های A و C، و رفتار این عبارت در حالت LOOSE خواهد بود.

@4+2,X,Y:s - فایل‌ها در قالب EC نگهداری می‌شوند؛ ۴ بخش داده روی سرورهایی با برچسب X و ۲ بخش پاریتی روی سرورهایی با برچسب Y نگهداری می‌شوند و رفتار این عبارت در حالت STRICT خواهد بود.

2A/[IP]:s - فایل‌ها در ۲ رونوشت نگهداری می‌شوند؛ هر دو روی سرورهایی با برچسب A، اما هر سرور باید IP متفاوتی داشته باشد و رفتار این عبارت در مواجهه با برچسب‌ها STRICT خواهد بود.

تعیین این‌که در صورت عدم امکان برآورده کردن شرایط برچسب‌های یک کلاس ذخیره‌سازی چه اقدامی انجام شود حائز اهمیت است؛ به عنوان مثال هنگامی که: فضای خالی روی سرورهای دارای برچسب‌های لازم وجود ندارد، تعداد کافی سرور با برچسب‌های لازم در دسترس نیست، یا تمام سرورهای دارای برچسب‌های لازم بیش از حد مشغول هستند. پرسش این است که آیا سیستم باید قطعات را روی سرورهای دیگر (با برچسب‌های غیرمنطبق) ایجاد کند یا خیر. این تصمیم باید توسط کاربر اتخاذ شود.

سه حالت عملیاتی وجود دارد: STANDARD، LOOSE و STRICT. این حالت‌ها به دلیل ماهیت و الگوریتم‌های متفاوت هر قالب، بسته به این‌که قطعه در قالب رونوشت‌ها ذخیره شده باشد یا قالب EC، رفتار متفاوتی دارند.

برای قالب رونوشت‌ها (Copies)، سه حالت به شرح زیر عمل می‌کنند:

در حالت STANDARD، در صورت مشغول بودن بیش از حد سرورها (Overload)، سیستم منتظر آن‌ها می‌ماند؛ اما در صورت عدم وجود فضای کافی، از سایر سرورها استفاده کرده و به محض فراهم شدن شرایط، داده‌ها را به سرورهای صحیح همگام‌سازی (Replicate) می‌کند. این بدان معناست که اگر برخی سرورها برای مدت طولانی در حالت مشغول باشند، ممکن است ایجاد قطعات جدید با برخی کلاس‌های ذخیره‌سازی ممکن نباشد و قطعات در معرض خطر (Undergoal) آن کلاس‌ها به دلیل تاخیر در همگام‌سازی بیشتر در معرض خطر از دست رفتن کامل قرار گیرند.

در حالت STRICT، در حین نوشتن فایل جدید، در صورت عدم وجود فضا روی سرورهای دارای برچسب‌های مشخص‌شده برای ایجاد قطعه، سیستم خطای کمبود فضا (ENOSPC) بازمی‌گرداند. سیستم همچنان منتظر سرورهای بیش از حد مشغول می‌ماند. اگر روی سرورهای دارای برچسب‌های منطبق با کلاس ذخیره‌سازی فضایی نباشد، همگام‌سازی قطعات در معرض خطر انجام نخواهد شد. این به معنای خطر بالای از دست رفتن داده‌ها در صورت پر شدن دائمی سرورهای دارای برچسب‌های خاص است!

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

جدول زیر خلاصه رفتار حالت‌ها را برای قطعات ذخیره‌شده در قالب رونوشت نمایش می‌دهد:

STANDARD STRICT LOOSE
CREATE - OVERLOADED WAIT WAIT WRITE ANY
CREATE - NO SPACE WRITE ANY ENOSPC WRITE ANY
REPLICATE - OVERLOADED WAIT WAIT WRITE ANY
REPLICATE - NO SPACE WRITE ANY NO COPY WRITE ANY

برای قطعات ذخیره‌شده در قالب کدگذاری حذفی (EC)، سه حالت به شرح زیر عمل می‌کنند:

به طور کلی، قطعات تنها زمانی از قالب رونوشت به قالب EC تبدیل می‌شوند که سرورهای کافی در سیستم برای ذخیره امن تمام بخش‌های قالب EC وجود داشته باشد. برای قالب EC @N+X، که در آن N تعداد بخش‌های داده است (۴ یا ۸) و X تعداد بخش‌های پاریتی/چک‌سام است (برابر با ۱ در نسخه CE یا هر عددی از ۱ تا ۹ در نسخه PRO)، الزامات عمومی عبارتند از:
- حداقل N+2X سرور قطعه برای تبدیل قطعات جدید از قالب رونوشت به قالب EC
- حداقل N+X سرور قطعه برای نگهداری قطعاتی که در حال حاضر در قالب EC هستند در همان قالب
- اگر تعداد سرورها کمتر از N+X باشد، تمام قطعات به قالب رونوشت (تعریف KEEP) بازمی‌گردند.

در حالت LOOSE، سیستم ابتدا سعی می‌کند از سرورهای منطبق با عبارت برچسب تعریف‌شده در کلاس ذخیره‌سازی استفاده کند، اما اگر سرورهای کافی با برچسب‌های «صحیح» در دسترس نباشد (به دلیل مشغول بودن، کمبود فضا یا تعریف نشدن)، صرف‌نظر از برچسب از هر سرور قطعه موجودی استفاده خواهد کرد؛ بنابراین مقادیر N+2X و N+X بر اساس تمام سرورهای قطعه در دسترس محاسبه می‌شوند. همچنین اگر یک بخش از قطعه در قالب EC غیرقابل دسترس یا خراب شود، بازیابی آن بخش روی هر سرور در دسترسی انجام خواهد شد.

در حالت STRICT، سیستم منحصراً از سرورهای منطبق با عبارت برچسب تعریف‌شده استفاده می‌کند؛ بنابراین فقط سرورهای در دسترس یا با مشغله کوتاه‌مدت منطبق با برچسب در محاسبه N+2X و N+X لحاظ می‌شوند. در صورت خرابی یک بخش، بازیابی تنها روی سرور دارای برچسب «صحیح» مجاز است و در صورت عدم دسترسی بلندمدت، قطعه به قالب رونوشت بازگردانده می‌شود.

در حالت STANDARD، سیستم در تصمیم‌گیری برای تبدیل قطعه جدید به قالب EC مانند حالت STRICT عمل می‌کند (محاسبه N+2X فقط روی سرورهای با برچسب صحیح). اما برای تصمیم‌گیری در مورد این‌که آیا قطعات موجود باید از قالب EC به رونوشت برگردند یا خیر، مانند حالت LOOSE تمام سرورهای در دسترس را بررسی می‌کند (N+X). در صورت خرابی بخش‌ها نیز رفتار LOOSE را در پیش گرفته و سعی می‌کند از هر سرور در دسترسی استفاده کند.

توجه! هنگام تبدیل قطعه از قالب رونوشت به EC، سیستم ابتدا یک عملیات «تفکیک محلی» (Local Split) انجام می‌دهد؛ یعنی یک رونوشت را انتخاب کرده و تمام بخش‌های EC لازم را روی سرور آن رونوشت محاسبه می‌کند. سپس این بخش‌ها به سرورهای قطعه جداگانه منتقل می‌شوند. در این فاصله کوتاه، بخش‌ها ممکن است حتی در حالت STRICT به طور موقت روی سرورهای دیگر ثبت شوند.

برای متغیرهای زمانی، مقدار می‌تواند به صورت عدد صحیح بر حسب ثانیه یا ساعت تعریف شود (بسته به حداقل واحد متغیر)، یا به صورت یک دوره زمانی در یکی از دو قالب زیر مشخص گردد:

قالب نخست: #.#T که در آن T یکی از شناسه‌های زیر است: s (ثانیه)، m (دقیقه)، h (ساعت)، d (روز) یا w (هفته)؛ کسرهای واحد به نزدیک‌ترین عدد صحیح گرد می‌شوند.

قالب دوم: #w#d#h#m#s که در آن هر تعداد از تعاریف می‌تواند حذف شود، اما تعاریف باقی‌مانده باید به ترتیب باشند (بنابراین #d#m معتبر است اما #m#d نامعتبر است)؛ دامنه‌ها: s,m از ۰ تا ۵۹، h از ۰ تا ۲۳، d از ۰ تا ۶، و w نامحدود است و اولین تعریف همواره نامحدود می‌باشد.

اگر حداقل واحد یک متغیر بزرگتر از ثانیه باشد، واحدهای کوچکتر از حداقل واحد پذیرفته نخواهند شد. برای نمونه، متغیری با حداقل واحد ساعت، واحدهای ثانیه و دقیقه را نمی‌پذیرد.

مثال‌ها:

1.5d معادل 1d12h و معادل 36h است.

2.5w معادل 2w3d12h و معادل 420h است؛ عبارت 2w84h نامعتبر است (زیرا h تعریف اول نیست و دامنه آن ۰ تا ۲۳ است).

قطعات در حین حلقه نگهداری فایل دارای فلگ آرشیو می‌شوند؛ این بدان معناست که زمان تا آرشیو تعریف‌شده با گزینه -d حداقل زمانی است که باید سپری شود، نه زمان دقیق.

رفتار پیش‌فرض سیستم این است که پس از تنظیم بیت آرشیو برای یک قطعه، حتی در صورت تغییر atime/ctime/mtime این بیت خاموش نمی‌شود، مگر اینکه فلگ R با گزینه -o تنظیم شده باشد. عملیات نوشتن روی یک قطعه همواره فلگ آرشیو آن را خاموش می‌کند.

فلگ‌های آرشیو:

C - استفاده از ctime فایل برای تعیین زمان فعال‌سازی فلگ آرشیو (فلگ پیش‌فرض).

M - استفاده از mtime فایل برای تعیین زمان فعال‌سازی فلگ آرشیو.

A - استفاده از atime فایل برای تعیین زمان فعال‌سازی فلگ آرشیو.

R - حالت برگشت‌پذیر؛ در صورت تغییر atime/mtime/ctime فایل، سیستم بررسی می‌کند که آیا فلگ آرشیو باید خاموش شود یا خیر.

F - حالت سریع؛ فلگ آرشیو در سریع‌ترین زمان ممکن تنظیم شده و مقدار مشخص‌شده با -d نادیده گرفته می‌شود.

P - حالت مبتنی بر هر قطعه؛ استفاده از mtime قطعه برای تعیین زمان فعال‌سازی فلگ آرشیو.

فلگ آرشیو را می‌توان به صورت دستی نیز تغییر داد (نگاه کنید به mfsarchive(1)).

نکته: وضعیت ARCHIVE به معنای عدم دسترسی، مسدود بودن برای نوشتن یا موارد مشابه نیست. این وضعیت تنها نشان می‌دهد داده‌ها برای نگهداری طولانی‌مدت در نظر گرفته شده‌اند، در مقایسه با وضعیت KEEP که داده‌ها فعال و دستخوش تغییر مکرر هستند. این تمایز فقط برای تعریف شیوه فیزیکی ذخیره‌سازی داده‌ها است و از دید کاربر، فایل با همان نام، مسیر و دسترسی‌ها به صورت یکسان در دسترس است.

کلاس‌های ذخیره‌سازی به فایل‌ها تخصیص می‌یابند، اما به لطف مکانیسم اسنپ‌شات (نگاه کنید به mfssnapshots(1))، یک قطعه می‌تواند به چندین فایل تعلق داشته باشد. در صورتی که یک قطعه به چندین فایل با کلاس‌های ذخیره‌سازی مختلف تعلق داشته باشد، یک کلاس ذخیره‌سازی باید برای تعیین شیوه نگهداری قطعه انتخاب شود. سیستم کلاسی را که بالاترین اولویت را در میان کلاس‌های آن فایل‌ها دارد انتخاب می‌کند.

اگر دو یا چند کلاس اولویت یکسانی داشته باشند، عوامل زیر به ترتیب اهمیت برای انتخاب کلاس در نظر گرفته می‌شوند:
- کلاسی با سطح افزونگی (RL) بالاتر انتخاب می‌شود،
- کلاسی که قالب EC در وضعیت ARCHIVE دارد نسبت به کلاس بدون EC ترجیح داده می‌شود،
- کلاسی که از برچسب‌ها برای وضعیت KEEP یا ARCHIVE استفاده می‌کند ترجیح داده می‌شود،
- کلاسی که قالب EC در وضعیت TRASH دارد ترجیح داده می‌شود،
- کلاسی که از برچسب‌ها برای وضعیت TRASH استفاده می‌کند ترجیح داده می‌شود،
- در صورت تساوی تمام شرایط بالا، کلاسی با شناسه (ID) بالاتر انتخاب می‌شود.

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

2CP - فقط وضعیت KEEP تعریف شده است؛ نگهداری ۲ رونوشت روی هر برچسبی (کلاس پیش‌فرض برای دایرکتوری ریشه /).

3CP - فقط وضعیت KEEP تعریف شده است؛ نگهداری ۳ رونوشت روی هر برچسبی.

EC4+1 - در وضعیت KEEP نگهداری ۲ رونوشت روی هر برچسبی؛ در وضعیت ARCHIVE نگهداری قطعات در قالب EC4+1 روی هر برچسبی؛ تاخیر آرشیو ۱ روز بر اساس ctime؛ فایل‌های کوچکتر از ۵۱۲ کیبی‌بایت به قالب EC تبدیل نمی‌شوند.

EC4+2 - (مخصوص نسخه PRO) در وضعیت KEEP نگهداری ۳ رونوشت؛ در وضعیت ARCHIVE نگهداری قطعات در قالب EC4+2؛ تاخیر آرشیو ۱ روز بر اساس ctime.

EC8+1 - در وضعیت KEEP نگهداری ۲ رونوشت؛ در وضعیت ARCHIVE نگهداری در قالب EC8+1؛ تاخیر آرشیو ۱ روز بر اساس ctime.

EC8+2 - (مخصوص نسخه PRO) در وضعیت KEEP نگهداری ۳ رونوشت؛ در وضعیت ARCHIVE نگهداری در قالب EC8+2؛ تاخیر آرشیو ۱ روز بر اساس ctime.

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

ویرایش کلاس ذخیره‌سازی "ClassEC4_1" برای آرشیو کردن قطعات پس از ۴۸ ساعت از زمان تغییر فایل (به جای زمان ایجاد):

mfsmodifysclass -d 2d -o m ClassEC4_1

ویرایش کلاس ذخیره‌سازی "Class3Copies" برای نگهداری قطعات روی سایر سرورهای قطعه (حالت LOOSE) در صورتی که سرورهای با برچسب "A" و "B" بیش از حد مشغول (overloaded) باشند:

mfsmodifysclass -m l Class3Copies

اشکالات را به نشانی <bugs@moosefs.com> گزارش دهید.

حق نشر (C) 2026 Jakub Kruszona-Zawadzki, Saglabs SA

این فایل بخشی از MooseFS است.

این نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط پروانه عمومی همگانی گنو (GNU GPL) نگارش ۲ منتشرشده توسط بنیاد نرم‌افزارهای آزاد بازتوزیع کرده یا تغییر دهید.

این برنامه به این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانت؛ حتی ضمانت ضمنی قابل فروش بودن یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به پروانه عمومی همگانی گنو مراجعه کنید.

شما باید یک نسخه از پروانه عمومی همگانی گنو را به همراه این برنامه دریافت کرده باشید؛ در غیر این صورت به نشانی https://www.gnu.org/licenses مراجعه نمایید.

mfsmount(8), mfstools(1), mfssclass(1), mfsarchive(1), mfsscadmin(1), mfscreatesclass(1), mfsdeletesclass(1), mfsmaster.cfg(5), mfschunkserver.cfg(5), mfstopology.cfg(5)

May 2026 MooseFS 4.59.2-1