BUFFINDEXED.CONF(5) InterNetNews Documentation BUFFINDEXED.CONF(5)

buffindexed.conf - فایل پیکربندی پایگاه‌داده نمایه‌سازی بافر در INN

فایل buffindexed.conf، واقع در pathetc، بافرهایی را مشخص می‌کند که روش مرور کلی (overview) buffindexed باید از آن‌ها استفاده کند. در صورتی که سرور از buffindexed استفاده کند (همان‌طور که توسط پارامتر ovmethod در inn.conf پیکربندی شده است)، وجود این فایل الزامی است.

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

علاوه بر بافرها، buffindexed اطلاعات را در فایلی به نام group.index در pathdb نیز ذخیره می‌کند. (این فایل نباید با فایلی به نام group.index در pathoverview که توسط روش مرور کلی tradindexed استفاده می‌شود، اشتباه گرفته شود.) این فایل حاوی اطلاعات مربوط به هر گروه خبری است: اشاره‌گر به بلوک نمایه برای گروه خبری، نشان بالا (high mark)، نشان پایین (low mark)، پرچم گروه، تعداد مقالات و مواردی از این دست. این فایل هنگام مقداردهی اولیه همه بافرها به طور خودکار ایجاد می‌شود و نباید به صورت دستی ویرایش گردد.

بافرهای buffindexed دارای اندازه ثابتی هستند، بنابراین buffindexed هرگز فضای بیشتری از آنچه در آن بافرها موجود است مصرف نخواهد کرد. اگر تمام بافرها پر شوند، زمانی که innd تلاش کند اطلاعات مرور کلی را برای هر مقاله اضافی ذخیره کند، کارایی را کاهش داده و متوقف می‌شود (throttle می‌کند) تا زمانی که فضا آزاد شود (مثلاً با expireover) یا بافر دیگری اضافه شود. این رفتار بر خلاف روش ذخیره‌سازی CNFS است.

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

داده‌های مرور کلی مقالات دریافت‌شده، به ازای هر ovflushcount مقاله (همان‌طور که در inn.conf تنظیم شده است) در دیسک تخلیه (flush) می‌شوند.

در فایل buffindexed.conf، خطوط خالی و خطوطی که با علامت هش ("#") شروع می‌شوند، نادیده گرفته می‌شوند. سایر خطوط باید در قالب زیر باشند:

<index>:<filename>:<size>

ترتیب خطوط اهمیتی ندارد.

مقدار <index> شاخص این بافر مرور کلی است و باید یکتا باشد. به جز این قید، می‌تواند هر عددی بین ۰ تا ۶۵۵۳۵ باشد.

مقدار <filename> مسیر به بافر است. طول مسیر نباید بیشتر از ۶۳ نویسه باشد.

مقدار <size> طول بافر بر حسب کیلوبایت است (۱ کیلوبایت = ۱۰۲۴ بایت). اگر <filename> یک دستگاه ویژه (special device) را مشخص نکند، اندازه فایل بافر باید <size> * 1024 بایت باشد. اگر یک دستگاه ویژه را مشخص کند، آن دستگاه باید حداقل به اندازه <size> فضا در دسترس داشته باشد. برای اطلاعات بیشتر درباره راه‌اندازی بافرها، بخش «ایجاد بافرها (CREATING BUFFERS)» را ببینید.

یک نمونه از فایل buffindexed.conf می‌تواند به این صورت باشد:

0:<pathoverview in inn.conf>/OV1:1536000
1:<pathoverview in inn.conf>/OV2:1536000

هنگامی که برای نخستین بار innd را با پیکربندی کامل و درست اجرا می‌کنید، باید پیام‌هایی مانند این را در pathlog/news.notice مشاهده کنید:

Aug 27 00:00:00 kevlar innd: buffindexed: no magic cookie found
    for ovbuff 0, initializing

اگر بافرها را حذف یا جایگزین کنید، باید با استفاده از makehistory مرور کلی را به طور کامل از نو بسازید. با این حال، بافرهای جدید را می‌توان بدون نیاز به تمهیدات خاصی اضافه کرد (به جز راه‌اندازی مجدد innd پس از تغییر دادن buffindexed.conf). اگر نیاز به بازسازی مرور کلی دارید، ابتدا باید تمام بافرها را با صفر پر (zero) کنید.

توصیه می‌کنیم فضای خالی زیادی در بافرهای موجود رزرو نکنید تا مدت زمان فرآیند expireover به حداقل برسد، و تنها زمانی بافرهای جدید اضافه کنید که فضای باقی‌مانده کم باشد (نتیجه "inndf -no" را ببینید). در نظر داشته باشید که برای هر مقاله در مخزن (spool) خود به حداقل ۰٫۶۵ کیلوبایت فضا نیاز خواهید داشت (بدون احتساب ارسال‌های مشترک یا crossposts). بنابراین، اگر ۵ میلیون مقاله دارید، حداقل به ۳٫۲۵ گیگابایت فضای دیسک برای buffindexed نیاز خواهید داشت.

دو روش برای ایجاد یک بافر جدید buffindexed وجود دارد:

1.
ایجاد یک فایل بزرگ روی یک سیستم‌فایل معمولی. ساده‌ترین روش برای انجام این کار احتمالاً استفاده از dd(1) با دستوری شبیه به زیر است:
dd if=/dev/zero of=/path/to/cycbuff bs=1024 count=<size>

که در آن <size> همان اندازه مندرج در خط مربوطه در buffindexed.conf است.

این ساده‌ترین روش است، اما این عیب را دارد که دسترسی به فایل‌های بسیار بزرگ در سیستم‌فایل‌های معمولی می‌تواند نسبتاً کند باشد (به‌ویژه در انتهای فایل)، و INN هنگام دسترسی به بافر دچار بار اضافی (overhead) غیرضروری سیستم‌فایل می‌شود.

2.
استفاده مستقیم از دستگاه‌های بلوکی (block devices). اگر سیستم‌عامل شما اجازه می‌دهد فراخوانی ()mmap را روی دستگاه‌های بلوکی اجرا کنید (سولاریس و نسخه‌های اخیر لینوکس این امکان را دارند، FreeBSD طبق آخرین گزارش‌ها ندارد)، این روش می‌تواند از تمام بار اضافی سیستم‌فایل بومی اجتناب کند. با این حال، توجه داشته باشید که سولاریس با قفل‌گذاری محدوده بایتی (byte range locking) روی دستگاه‌های بلوکی مشکل دارد، و بنابراین این روش نباید در سولاریس استفاده شود.

دیسک را پارتیشن‌بندی کنید. اگر از سولاریس استفاده می‌کنید، پارتیشن‌های خود را طوری تنظیم کنید که از سیلندر اول دیسک اجتناب شود (در غیر این صورت، سرآیند buffindexed جدول پارتیشن دیسک را رونویسی کرده و بافرها را غیرقابل دسترس می‌کند). سپس، فایل‌های دستگاه را برای هر دستگاه بلوکی که قصد استفاده از آن را دارید ایجاد کنید.

استفاده از فایل‌های دستگاه بلوکی در مسیر /dev توصیه نمی‌شود، زیرا سامانه اخبار (news) مجوز نوشتن روی آن‌ها را ندارد و تغییر دادن مجوزهای فایل‌های دستگاه سیستمی ممکن است بر بخش‌های دیگر سیستم تأثیر بگذارد. در عوض، از mknod(1) برای ایجاد یک مجموعه جدید از دستگاه‌های بلوکی استفاده کنید (در جایی مانند pathspool/overview که فقط توسط کاربر news قابل نوشتن باشد). برای این کار، دستور "ls -Ll" را روی دستگاه‌های موجود در /dev که متناظر با دستگاه‌های بلوکی مورد نظر شما هستند اجرا کنید. شماره‌های اصلی (major) و فرعی (minor) دستگاه به ترتیب در ستون‌های پنجم و ششم (دقیقاً قبل از تاریخ) قرار دارند. سپس mknod را به شکل زیر اجرا کنید:

mknod <filename> b <major> <minor>

که در آن <filename> مسیر دستگاهی است که باید ایجاد شود (مطابق با بخش <filename> در خط پیکربندی buffindexed) و <major> و <minor> شماره‌های اصلی و فرعی دستگاه هستند که در بالا مشخص شدند.

در اینجا یک اسکریپت کوتاه برای انجام این کار در صورت دریافت مسیر فایل دستگاه سیستمی به عنوان آرگومان آورده شده است:

#!/bin/sh
base=`echo "$1" | sed 's%.*/%%'`
major=`ls -Ll "$1" | awk '{print $5}' | tr -d ,`
minor=`ls -Ll "$1" | awk '{print $6}`
mkdir -p <pathoverview in inn.conf>
mknod <pathoverview>/"$base" b "$major" "$minor"
chown news:news <pathoverview>/"$base"
chmod 644 <pathoverview>/"$base"

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

نوشته‌شده توسط Katsuhiro Kondou <kondou@nec.co.jp> برای InterNetNews. تبدیل به POD توسط Russ Allbery <eagle@eyrie.org>.

expireover(8), inn.conf(5), inndf(8), makehistory(8).

2024-05-19 INN 2.7.4