گنجه
۰۷ ۱۷م, ۱۳۸۸
همون طور که احتمالاً میدونید dpkg توساخت0 مدیریت بستهها1 در Debian است. یعنی APT و Synaptic و Aptitude و … همه روی dpkg بنا شده اند.
dpkg برای نگهداری بعضی اطلاعات بستههای نصبشده، از تعداد زیادی (برای من حدود ۹۰۰۰ تا) پروندهٔ2 کوچک توی مسیر /var/lib/dpkg/info استفاده میکنه. هر بار که بستهای رو نصب یا حذف میکنید dpkg همهٔ اون پروندهها رو از روی لوح3 میخونه. این کار روی سامانهٔ پروندهٔ4 مورد استفادهٔ من، که Ext4 هست، اولین بار بیست-سی ثانیهای طول میکشه، که برای من مدت زیادی هست. این کار در دفعات بعدی به علت قرار گرفتن همهٔ اون پروندهها در نهانگاه5 سامانهٔ پرونده در حافظهٔ اصلی، بسیار سریعتر انجام میشه، تا وقتی که دوباره از نهانگاه خارج بشند.
این مشکل هر از گاهی یک سیخی بهم میزد و روی اعصابم راه میرفت. فکرهای مختلفی برای حلش به ذهنم رسید. از بسیار پیچیده، مثل طراحی و پیادهسازی مجدد dpkg روی Tokyo Cabinet یا SQLite، تا بسیار ساده:
شاید بدونید که سامانهٔ پروندهٔ ReiserFS در کار با پروندههای کوچک بسیار عالی عمل میکنه. علتش هم استفاده از فن «تهچِپانی»6 است.7 فکر کردم شاید اگر پوشهٔ /var/lib/dpkg/info رو توی ReiserFS نگه دارم، مشکل حل بشه. این کار رو کردم، ولی به خاطر کارکرد8 داخلی dpkg روی کل /var/lib/dpkg:
$ sudo su - # cd /var/lib # tar cpzf dpkg.tar.gz dpkg # dd if=/dev/zero of=dpkg.reiserfs bs=$((256*1024*1024)) count=1 # mkreiserfs -f dpkg.reiserfs # mount -oloop dpkg.reiserfs dpkg # tar xpf dpkg.tar.gz
و بعد آزمودن و دائمی کردن با افزودن به fstab:
# echo 3 >/proc/sys/vm/drop_caches # apt-get install hello # apt-get purge hello # echo /var/lib/dpkg.reiserfs /var/lib/dpkg reiserfs loop,noatime 0 1 >>/etc/fstab
فکره جواب داد و سرعت dpkg بسیار بهتر شد. حالا حتی اولین بار هم dpkg اون کار رو در دو-سه ثانیه انجام میده.
علاوه بر مهارت ReiserFS در کار با پروندههای کوچک، چند نکتهٔ دیگه هم قابل ذکر هست. یکی این که Ext4 به علت فن «حوزه»9 در کار با پروندههای نسبتاً بزرگی که یکجا تخصیص10 مییابند بسیار سریع هست. برای همین به dd گفتم که کل پرونده رو یکجا بسازه.
از طرفی چون، در نتیجهٔ نکتهٔ قبل، کل پروندههای مربوط به dpkg روی لوح نزدیک به هم قرار میگیرند و پراکنده نیستند، با خونده شدن یک پرونده از اون حوالی، تعداد زیادی از بقیهشون هم توی نهانگاه لوح و تعدادی هم توی نهانگاه سامانهٔ پرونده قرار میگیرند. همین امر باعث میشه کلی زمان جویش11 که قبلاً برای رسیدن به پرندههای پراکنده در اطراف و اکناف لوح هدر میرفت، صرفهجویی بشه.
به گزینهٔ12 noatime در fstab هم دقت کنید. رفتار معمولی سامانههای پرونده این هست که در هر دسترسی (اعم از خواندن یا نوشتن) به یک پرونده، زمان دسترسی رو ذخیره میکنند. این خیلی بده! هر دسترسی = حداقل یک عمل نوشتن روی لوح، و عمل نوشتن هم معمولاً کندتر از خوندن هست. نکته این جاست که برنامههای رایج امروزی معمولاً روی اون زمان ثبتشده برای آخرین دسترسی حساب نمیکنند و عملاً اون عدد بیاستفاده است! گزینهٔ noatime به سامانهٔ پرونده میگه که کلاً قید ثبت اون زمان رو بزنه و به این ترتیب کلی عمل نوشتن صرفهجویی کنه.
۰۲ ۱۸م, ۱۳۸۸
چندی پیش در این مورد نوشته بودم که چگونه به کمک یخزن0، لوح سختی1 احیا شد.
چند روز بعدش یکی از دوستان پیامک2 زد که به همون روش، یک لوح لغزان3 رو احیا کرده!
جالبتر این که چند روز پیش، یک MP3پخشکن4 که چند سالی بود کار نمیکرد، به همون روش احیا شد!!!
۰۱ ۱۵م, ۱۳۸۸
این مطلب در مورد زنده کردن لوحهای سختشدهٔ دلهامون به کمک موعظه یا چیزی شبیه اون نیست! (البته متأسفانه)
لوح سختی0 دارم که خراب شده بود. وقتی رایانه1 رو روشن میکردم، هی سعی میکرد راه بیفته ولی موفق نمیشد و اصلاً دور بر نمیداشت2. در نتیجه رایانه هم همون اول کار، توی مرحلهٔ شناسایی لوحهای سخت، گیر میکرد و راهاندازی3 نمیشد. تقریباً ازش قطع امید کرده بودم.
طبق معمول قبل از هر گونه تصمیمگیری، سری به اینترنت زدم تا ببینم ملت در این باره چی گفتهاند. بعد از کمی جستوجو، با راهکاری غیرمنتظره مواجه شدم: لوح سخت رو بگذارید تو یخزن4! بله، گفته بودند که بعد از سرد کردن لوح سخت، باید بلافاصله اون رو به رایانه بزنید. اگر قسمت باشه5 چند دقیقه فرصت دارید تا دادههای مهمترتون رو بر دارید.
از اون جا که چیز زیادی برای از دست دادن نداشتم، و در ضمن از این جور انگولککردنها خوشم میآد، تصمیم گرفتم این کار رو بکنم. لوح سخت رو توی یک کیسه پیچیدم تا برفک نزنه و خیس نشه و بعد داخل یخزن گذاشتم. بعد از چند ساعت که لوح سخت قصهٔ ما حسابی یخ زد، درش آوردم و سریع به رایانه وصلش کردم.
رایانه رو روشن کردم و در کمال ناباوری دیدم داره کار میکنه! با نرمافزار PowerMax آزمون سریع SMART6 رو انجام دادم و دیدم واقعاً سالمه7. با خودم گفتم شاید اگر در حالت خاموش گرم بشه، دوباره به همون روز بیفته. برای همین، رایانه رو خاموش نکردم و گذاشتم لوح سخت دائماً کار کنه تا در حال چرخش گرم بشه، باشد که سالم بمونه. نمیدونم کار این فکر بود یا نه، ولی هر چی بود جواب داد! برای این که مطمئن بشم که لوح سخت برای طولانیمدت سالم شده، رایانه رو خاموش کردم تا لوح کمی خنک بشه و بعد دوباره روشنش کردم. دوباره آزمودمش و دیدم که سالمه.
برای اطمینان از سلامت دادهها، از توی سامانهٔ عامل8، چند تا پرونده9 رو خوندم و بررسی کردم که شکر خدا سالم بودند.
سپاس خدای راست