.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.0102 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "CYCBUFF.CONF 5" .TH CYCBUFF.CONF 5 2025-05-09 "INN 2.7.4" "InterNetNews Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" cycbuff.conf \- پرونده پیکربندی روش ذخیره‌سازی CNFS در INN .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" این پرونده بافرهای چرخشی (cyclical buffers) را که استخرهای ذخیره‌سازی CNFS (سامانه پرونده چرخشی اخبار یا Cyclic News File System) را تشکیل می‌دهند، تعریف می‌کند. همچنین برخی از گزینه‌های کنترل‌کننده رفتار سامانه ذخیره‌سازی CNFS را می‌توان در اینجا تنظیم کرد. در صورت استفاده از روش ذخیره‌سازی CNFS، وجود \fIcycbuff.conf\fR الزامی است. سامانه INN این پرونده را در مسیر \fIpathetc\fR (همان‌طور که در \fIinn.conf\fR تعیین شده) جستجو خواهد کرد. .PP سامانه CNFS مقاله‌ها را در شیءهای منطقی به نام \fImetacycbuff\fR ذخیره می‌کند. هر metacycbuff به نوبه خود از یک یا چند بافر فیزیکی به نام \fIcycbuff\fR تشکیل شده است. هنگام نوشتن مقاله‌ها در metacycbuff، هر مقاله به صورت نوبتی (round-robin) در cycbuff بعدی موجود در فهرست نوشته می‌شود (مگر اینکه حالت \f(CW\*(C`sequential\*(C'\fR مشخص شده باشد، که در این صورت هر cycbuff قبل از رفتن به بافر بعدی کاملاً پر می‌شود). این ویژگی به شما امکان می‌دهد cycbuffهای مجزا را روی چندین دیسک فیزیکی توزیع کرده و بار کاری را بین آن‌ها متوازن سازید. توجه داشته باشید که برای استفاده از هر cycbuff بزرگتر از ۲ گیگابایت در پلتفرم‌های ۳۲ بیتی (و برخی پلتفرم‌های بسیار نادر ۶۴ بیتی که نوع \fIoff_t\fR را ۳۲ بیتی تعریف می‌کنند)، باید INN را با گزینه \fB\-\-enable\-largefiles\fR کامپایل کنید. .PP برای کسب اطلاعات بیشتر درباره نحوه پیکربندی INN جهت استفاده از CNFS، به storage.conf(5) مراجعه کنید. .PP خطوط خالی و خطوطی که با علامت هش (\f(CW\*(C`#\*(C'\fR) شروع می‌شوند، نادیده گرفته می‌شوند. سایر خطوط باید به یکی از قالب‌های زیر باشند: .PP .Vb 4 \& cycbuffupdate: \& refreshinterval: \& cycbuff::: \& metacycbuff::[,,...][:] .Ve .PP (که در آن موارد محصور در [] اختیاری هستند). ترتیب خطوط عمدتاً اهمیتی ندارد، اما تمام خطوط \fIcycbuff\fR باید پیش از خطوط \fImetacycbuff\fR قرار گیرند. خطوط طولانی را می‌توان با قرار دادن یک بک‌اسلش (\f(CW\*(C`\e\*(C'\fR) در انتهای خط، در خط بعدی ادامه داد. .IP \fIcycbuffupdate\fR: 4 .IX Item "cycbuffupdate:" تعداد مقاله‌های نوشته‌شده پیش از بازنویسی سرآیند (header) cycbuff بر روی دیسک را برابر تنظیم می‌کند. در بیشتر سیستم‌عامل‌ها، نیازی به نوشتن سرآیند بر روی دیسک برای در دسترس بودن داده‌های به‌روزشده برای سایر فرایندهایی که روی همان سیستم مقاله‌ها را از CNFS می‌خوانند نیست؛ اما هرگونه دسترسی به cycbuffهای CNFS از طریق NFS تنها داده‌های موجود در آخرین بازنویسی سرآیند را خواهد دید. پس از یک فروپاشی سیستم (system crash)، ممکن است تمام به‌روزرسانی‌های پس از آخرین بازنویسی سرآیند CNFS از دست بروند. مقدار پیش‌فرض، در صورت حذف این خط، برابر \f(CW\*(C`25\*(C'\fR است، به این معنی که سرآیند پس از ذخیره هر ۲۵ مقاله در آن cycbuff، روی دیسک نوشته می‌شود. .IP \fIrefreshinterval\fR: 4 .IX Item "refreshinterval:" بازه زمانی (به ثانیه) بین بازخوانی‌های سرآیند cycbuff را برابر تنظیم می‌کند. این مورد عمدتاً بر \fBnnrpd\fR تأثیر می‌گذارد و بسامد به‌روزرسانی آگاهی آن از محتویات فعلی cycbuffهای CNFS را کنترل می‌کند. مقدار پیش‌فرض در صورت حذف این خط برابر \f(CW\*(C`30\*(C'\fR است. .IP \fIcycbuff\fR::: 4 .IX Item "cycbuff:::" یک cycbuff مشخص در CNFS را پیکربندی می‌کند. مقدار یک نام نمادین برای بافر است که بعداً در یک خط metacycbuff استفاده می‌شود و نباید بیشتر از ۷ نویسه باشد. مقدار مسیر کامل به پرونده بافر یا دستگاه بلوکی (block device) است و نباید بیشتر از ۶۳ نویسه باشد. مقدار طول بافر بر حسب کیلوبایت است (هر ۱ کیلوبایت برابر ۱۰۲۴ بایت است). اگر یک دستگاه بلوکی نباشد، باید دقیقاً به اندازه \ *\ 1024\ بایت باشد. .Sp اگر می‌خواهید اندازه زیر ۲ گیگابایت باقی بماند، اندازه را زیر \f(CW\*(C`2097152\*(C'\fR نگه دارید. .Sp توجه داشته باشید که CNFSv4 از پرونده‌ها و پارتیشن‌های تا ۱۶ ترابایت پشتیبانی می‌کند. .IP \fImetacycbuff\fR::[,,...][:] 4 .IX Item "metacycbuff::[,,...][:]" مجموعه‌ای از بافرهای CNFS را مشخص می‌کند که از دیدگاه INN یک مکان ذخیره‌سازی منطقی واحد را تشکیل می‌دهند. در \fIstorage.conf\fR به Metacycbuffها به‌عنوان مکان‌های ذخیره‌سازی مقاله‌ها ارجاع داده می‌شود؛ بنابراین برای قرار دادن مقاله‌ها در یک cycbuff، آن بافر باید به‌عنوان بخشی از یک metacycbuff فهرست شده و سپس در \fIstorage.conf\fR به آن ارجاع داده شود. .Sp پارامتر نام نمادین metacycbuff است که در فیلد options: ورودی‌های \f(CW\*(C`cnfs\*(C'\fR در \fIstorage.conf\fR به آن ارجاع داده می‌شود. این نام نباید بیشتر از هشت نویسه باشد. مقدار نام یک cycbuff است (بخش در یک خط cycbuff) و می‌توان هر تعداد cycbuff را که با کاما از هم جدا شده‌اند، مشخص کرد. .Sp اگر بیش از یک cycbuff در یک metacycbuff وجود داشته باشد، دو روش وجود دارد که INN می‌تواند مقاله‌ها را بین cycbuffها توزیع کند. حالت پیش‌فرض، یعنی \f(CW\*(C`INTERLEAVE\*(C'\fR، مقاله‌ها را در هر cycbuff به روش نوبتی (round-robin) ذخیره می‌کند؛ یک مقاله در هر cycbuff به ترتیبی که فهرست شده‌اند. اگر اندازه‌های cycbuffها بسیار متفاوت باشد، این امر می‌تواند باعث شود برخی از آن‌ها بسیار سریع‌تر از بقیه پر و بازنویسی (roll over) شوند، و بسته به چیدمان دیسک شما ممکن است بهترین کارایی را ارائه ندهد. حالت ذخیره‌سازی دیگر، \f(CW\*(C`SEQUENTIAL\*(C'\fR، به نوبت در هر cycbuff می‌نویسد تا زمانی که آن cycbuff پر شود و سپس به سراغ بعدی می‌رود؛ و با پر شدن آخرین بافر، به بافر اول بازگشته و چرخه جدیدی را آغاز می‌کند. برای مشخص کردن حالت ذخیره‌سازی به جای استفاده از حالت پیش‌فرض، یک دونقطه و سپس حالت (\f(CW\*(C`INTERLEAVE\*(C'\fR یا \f(CW\*(C`SEQUENTIAL\*(C'\fR) را در انتهای خط metacycbuff اضافه کنید. .PP برنامه \fBinnd\fR پرونده \fIcycbuff.conf\fR را تنها هنگام راه‌اندازی می‌خواند؛ بنابراین اگر تغییری در این پرونده ایجاد کردید و می‌خواهید \fBinnd\fR تغییرات را اعمال کند، باید از دستور \f(CW\*(C`ctlinnd xexec innd\*(C'\fR استفاده کنید؛ اجرای \f(CW\*(C`ctlinnd reload all \*(Aq\*(Aq\*(C'\fR کافی نخواهد بود. .PP هنگامی که مقاله‌ها ذخیره می‌شوند، نام cycbuff که مقاله در آن ذخیره شده به عنوان بخشی از نشانگر مقاله (article token) ثبت می‌شود. برای اینکه INN بتواند مقاله‌ها را از یک cycbuff بازیابی کند، آن cycbuff باید در \fIcycbuff.conf\fR فهرست شده باشد. با این حال، اگر قرار نیست INN روی یک cycbuff بنویسد، نیازی نیست (و نباید) در یک metacycbuff فهرست شود. .PP این ویژگی راه ساده‌ای را برای خارج کردن از مدار (retire) یک cycbuff فراهم می‌کند. کافی است آن را از metacycbuff مربوطه حذف کرده و خط cycbuff آن را باقی بگذارید، سپس \fBinnd\fR را بازراه‌اندازی کنید (برای مثال با \f(CW\*(C`ctlinnd xexec innd\*(C'\fR). در این حالت، هیچ مقاله جدیدی در آن cycbuff قرار نخواهد گرفت و هیچ مقاله‌ای نیز از آن منقضی نخواهد شد. پس از اینکه دیگر به مقاله‌های موجود در آن cycbuff نیازی نداشتید، به سادگی آن را به طور کامل از \fIcycbuff.conf\fR حذف کنید. سپس از دیدگاه INN تمام مقاله‌ها حذف‌شده به نظر می‌رسند و اجرای شبانه بعدی منقضی‌سازی (expire)، ارجاع‌های باقی‌مانده به آن‌ها را پاکسازی خواهد کرد. .PP افزودن یک cycbuff جدید تنها نیازمند ایجاد آن (به بخش زیر مراجعه کنید)، افزودن یک خط cycbuff، اضافه کردن آن به یک metacycbuff و سپس بازراه‌اندازی \fBinnd\fR است. به همین ترتیب، تغییر تخصیص یک cycbuff موجود از یک metacycbuff به دیگری تنها نیازمند اصلاح متناسب دو metacycbuff و سپس بازراه‌اندازی \fBinnd\fR است. (تنها نام cycbuff در توکن‌های API ذخیره‌سازی ثبت می‌شود). .SH "ایجاد بافرهای چرخشی (CREATING CYCBUFFS)" .IX Header "CREATING CYCBUFFS" هنگام ایجاد یک cycbuff جدید، دو روش مختلف برای ایجاد بافرهایی که مقاله‌ها در آن‌ها ذخیره می‌شوند وجود دارد. .IP 1. 4 ایجاد یک پرونده بزرگ بر روی یک سامانه پرونده معمولی. ساده‌ترین روش برای انجام این کار احتمالاً استفاده از dd(1) با دستوری مانند زیر است: .Sp .Vb 1 \& dd if=/dev/zero of=/path/to/cycbuff bs=1024 count= .Ve .Sp که در آن همان اندازه تعیین‌شده در خط cycbuff در پرونده \fIcycbuff.conf\fR است. پرونده \fIINSTALL\fR حاوی اسکریپتی است که این دستورها را بر اساس پرونده \fIcycbuff.conf\fR شما تولید می‌کند. .Sp این ساده‌ترین روش است، اما این عیب را دارد که پرونده‌های بسیار بزرگ در سامانه‌های پرونده معمولی ممکن است دسترسی نسبتاً کندی داشته باشند (به ویژه در انتهای پرونده)، و هنگام دسترسی به cycbuff بار اضافی غیرضروری سامانه پرونده بر دوش INN تحمیل می‌شود. .IP 2. 4 استفاده مستقیم از دستگاه‌های بلوکی (block devices). اگر سیستم‌عامل شما امکان فراخوانی mmap() را بر روی دستگاه‌های بلوکی می‌دهد (سولاریس و نسخه‌های اخیر لینوکس این امکان را دارند، FreeBSD طبق آخرین گزارش‌ها ندارد)، این روش توصیه می‌شود چرا که می‌توانید از تمام سربار سامانه پرونده محلی اجتناب کنید. .Sp توجه داشته باشید که برخی از سیستم‌عامل‌ها از پرونده‌های بزرگتر از ۲ گیگابایت پشتیبانی نمی‌کنند، که این امر اندازه یک cycbuff واحد را محدود می‌کند؛ اما همچنان می‌توانید چندین cycbuff را در هر metacycbuff ترکیب کنید. مشخص شده است که نسخه‌های بسیار قدیمی لینوکس (قبل از هسته‌های نسخه 2.4 که این محدودیت را به ۲ ترابایت افزایش داد) این محدودیت را دارند؛ FreeBSD این محدودیت را ندارد. برخی از سیستم‌عامل‌هایی که از پرونده‌های بزرگ پشتیبانی می‌کنند، از دسترسی مستقیم به دستگاه‌های بلوکی برای پارتیشن‌های بزرگ پشتیبانی نمی‌کنند (Solaris قبل از نسخه Solaris\ 7، یا در صورت عدم اجرا در حالت ۶۴ بیتی، در این دسته قرار دارد)؛ در این سیستم‌عامل‌ها، اگر به cycbuffهای بزرگتر از ۲ گیگابایت نیاز دارید، باید از پرونده‌های معمولی استفاده کنید. در صورت شک و تردید، اندازه cycbuffهای خود را کمتر از ۲ گیگابایت نگه دارید. .Sp دیسک را به گونه‌ای پارتیشن‌بندی کنید که اندازه هر پارتیشن مساوی یا کمتر از ۲ گیگابایت باشد. اگر از سولاریس استفاده می‌کنید، پارتیشن‌های خود را به گونه‌ای تنظیم کنید که از سیلندر اول دیسک اجتناب شود (در غیر این صورت، سرآیند cycbuff جدول پارتیشن دیسک را بازنویسی کرده و cycbuffها را غیرقابل دسترس می‌کند). سپس، پرونده‌های دستگاه را برای هر دستگاه بلوکی که قصد استفاده از آن را دارید ایجاد کنید. .Sp استفاده از پرونده‌های دستگاه بلوکی در مسیر \fI/dev\fR توصیه نمی‌شود، زیرا سامانه اخبار مجوز نوشتن در آن‌ها را ندارد و تغییر مجوزهای پرونده‌های دستگاه سیستمی ممکن است بر بخش‌های دیگر سیستم تأثیر بگذارد. در عوض، از mknod(1) برای ایجاد مجموعه‌ای جدید از دستگاه‌های بلوکی استفاده کنید (در مکانی مانند \fIpathspool\fR/cycbuffs که تنها توسط کاربر news قابل نوشتن باشد). برای این کار، دستور \f(CW\*(C`ls \-Ll\*(C'\fR را روی دستگاه‌های موجود در \fI/dev\fR که متناظر با دستگاه‌های بلوکی مورد نظر شما هستند اجرا کنید. شماره‌های دستگاه اصلی (major) و فرعی (minor) به ترتیب در ستون‌های پنجم و ششم (درست قبل از تاریخ) قرار دارند. سپس mknod را به شکل زیر اجرا کنید: .Sp .Vb 1 \& mknod b .Ve .Sp که در آن مسیر دستگاهی است که باید ایجاد شود (مطابق با بخش در خط cycbuff) و و شماره‌های اصلی و فرعی دستگاه هستند که در بالا مشخص شدند. .Sp در اینجا یک اسکریپت کوتاه برای انجام این کار آورده شده که مسیر پرونده دستگاه سیستمی را به عنوان آرگومان دریافت می‌کند: .Sp .Vb 8 \& #!/bin/sh \& base=\`echo "$1" | sed \*(Aqs%.*/%%\*(Aq\` \& major=\`ls \-Ll "$1" | awk \*(Aq{print $5}\*(Aq | tr \-d ,\` \& minor=\`ls \-Ll "$1" | awk \*(Aq{print $6}\` \& mkdir \-p /cycbuffs \& mknod /cycbuffs/"$base" b "$major" "$minor" \& chown news:news /cycbuffs/"$base" \& chmod 644 /cycbuffs/"$base" .Ve .Sp اطمینان حاصل کنید که پرونده‌های ایجاد شده متعلق به کاربر news و گروه news باشند، همان‌طور که در زمان پیکربندی تعیین شده است (پیش‌فرض برای هر دو \f(CW\*(C`news\*(C'\fR است). همچنین اطمینان حاصل کنید که مجوزهای روی دستگاه‌ها به کاربر news اجازه خواندن و نوشتن می‌دهد، و اگر می‌خواهید سایر کاربران سیستم بتوانند از \fBsm\fR برای بازیابی مقاله‌ها استفاده کنند، مطمئن شوید که دسترسی خواندن عمومی (world-readable) دارند. .PP پس از اینکه همه چیز را به درستی پیکربندی کردید و \fBinnd\fR را راه‌اندازی نمودید، باید پیام‌هایی در \fInews.notice\fR مشاهده کنید که شبیه به این هستند: .PP .Vb 1 \& innd: CNFS: no magic cookie found for cycbuff ONE, initializing .Ve .PP که در آن \f(CW\*(C`ONE\*(C'\fR همان نامی خواهد بود که برای cycbuff خود برگزیده‌اید. .SH "پیشینه (HISTORY)" .IX Header "HISTORY" نوشته شده توسط Katsuhiro Kondou برای InterNetNews. بازنویسی در قالب POD توسط Russ Allbery . .SH "همچنین ببینید (SEE ALSO)" .IX Header "SEE ALSO" ctlinnd(8), innd(8), nnrpd(8), sm(8), storage.conf(5).