انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: ava در 26 مهر 1393، 07:40 بظ
-
سلام بر برو بچ ! بعد چند ماه نبود اومدم با سوال های خفن :)
--
خوب میدونیم که سرعت رم از جدید ترین و گران ترین ssd های موجود در بازار بسیار بالاتر هست و مخصوصا رم های جدید ddr4 با سرعت بالا 2800 مگا هرتزی و ... !
حالا کسی که یک سیستم خوب داره مقلا 32 گیگ یا 64 گیگ رم و تو لینوکس معمولا 1.2 گیگ رم مصرف میشه در نشست یونیتی و ... و کلا تا 4 گیگ پر میشه در مصارف عادی بازی و ... و بقیه رم بلا استفاده میمونه ! خوب میتونیم با این اضافه سخت افزار کار های بهتری انجام بدیم
یکی از اون کار ها اینه که فایل ها و کتابخانه های برنامه های اجرایی رو مونت کنیم روی رم تا سرعت اجرای برنامه ها 200-300 برابر بیشتر بشه به طوری که مثلا کلیک روی فایرفاکس همانا و باز شدنش همانا !
البته بوت شدن کامپیوتر ممکنه 1 دقیقه طول بکشه ولی خوب خیلیا مثل من یک بار سیستم رو روشن میکنن و بعدش تا 10-12 ساعت خاموش نمیشه سیستم و یا گاهی چند هفته هم خاموش نمیکنیم به در نتیجه اون یک دقیقه صبر اولیه برای بوت شدن سیستم میرزه به ساعت ها کار با ابر رایانمون !
خوب به این کار میگن ramdisk و چیز خاص و عجیبی نیست ! البته اطلاعات رم فرار هست و در هر بار خاموش شدن سیستم از بین میره که با روش پشتیبان گیری از اطلاعات و قرار دادنش روی دیسک و دوباره مونت شدنش در هنگام اجرا این مشکل هم حل میشه
خوب من کمی سرچ کردم و یه سری آموزش پیدا کردم و مراحل کار رو به این صورت پیش رفتم
اول یه پوشه میسازیم توی /mnt و اسمشو میزاریم رم دیسک
mkdir /mnt/ramdisk
بعدش فایل /etc/fstab رو با یه ویرایشگر متن مثل nano یا وی باز میکنیم و متن زیر رو به ته کد ها اضافه میکنیم
tmpfs /mnt/ramdisk tmpfs defaults,size=8192M 0 0
اون 8192 میزان اجازه مونت شدن فایل ها روی رم هست و توصیه شده که نصف میزان رم اصلیتون باشه و البته شما با توجه به کارتون و فضای رمتون باید مقدار مناسب رو انتخاب کنید
بعد از این کار با دستور مونت این پوشه که ساختیم رو مونت میکنیم به این صورت
mount /mnt/ramdisk
بعد با دو تا دستور زیر میتونیم چک کنیم ببینیم درست مونت شدن یا نه
mount
df -h
خروجی چیزی مثل این هست
tmpfs on /mnt/ramdisk type tmpfs (rw,relatime,size=8388608k)
tmpfs 8.0G 0.0G 8.0G 0% /mnt/ramdisk
حالا برای بک آپ گرفتن از محتویات که روی رم مونت میشن باید یه پوشه بسازیم که در خاموش شدن و به مشکل خوردن سیستم اطلاعات از بین نره
mkdir /var/ramdisk-backup
یک بش اسکریپت میسازیم در این آدرس به نام رم دیسک
nano /etc/init.d/ramdisk
و بسته به دلخواه میتونیم کد های مختلف رو توش قرار بدیم که یکی با rsync سینک میکنه محتویات رو تو این پوشه و دو تا دیگه هم اول فشره و بعد سینک میکنن که حجم کمتر بگیره که من همون کد سینک معمولی رو قرار میدم و در آخر منبع رو معرفی میکنم که باقی کد ها رو ببینید و تایپک زیادی شلوغ نشه
#! /bin/sh
# /etc/init.d/ramdisk.sh
#
case "$1" in
start)
echo "Copying files to ramdisk"
rsync -av /var/ramdisk-backup/ /mnt/ramdisk/
echo [`date +"%Y-%m-%d %H:%M"`] Ramdisk Synched from HD >> /var/log/ramdisk_sync.log
;;
sync)
echo "Synching files from ramdisk to Harddisk"
echo [`date +"%Y-%m-%d %H:%M"`] Ramdisk Synched to HD >> /var/log/ramdisk_sync.log
rsync -av --delete --recursive --force /mnt/ramdisk/ /var/ramdisk-backup/
;;
stop)
echo "Synching logfiles from ramdisk to Harddisk"
echo [`date +"%Y-%m-%d %H:%M"`] Ramdisk Synched to HD >> /var/log/ramdisk_sync.log
rsync -av --delete --recursive --force /mnt/ramdisk/ /var/ramdisk-backup/
;;
*)
echo "Usage: /etc/init.d/ramdisk {start|stop|sync}"
exit 1
;;
esac
exit 0
حالا این اسکریپت رو که ساختیم به این صورت به استارت آپ اضافه میکنیم که در هر بار اجرای سیستم اجرا بشه
update-rc.d ramdisk defaults 00 99
و بعد دستور زیر رو میزنیم
/etc/init.d/ramdisk start
مشکل اینجاس که من تغیر خاصی ندیدم !
یعنی هیچ تغیری ایجاد نمیشه با این کار ها این هم لینک منبع !
http://www.observium.org/wiki/Persistent_RAM_disk_RRD_storage
من یه راهنمای دیگه هم دارم برای جنتو هست و برخی فایل ها و آدرس فایل هاش با اوبونتو فرق دارن البته دیدنش بد نیست به این آدرس
https://forums.gentoo.org/viewtopic-t-296892-postdays-0-postorder-asc-start-0.html
من کلی رم دارم و میخوام تا جای ممکن همه چیمو مونت کنم روی رم
اگه قبلا کار مشابهی کردین یا میدونید مشکل و ایراد کار من کجاس لطفا راهنمایی کنید ممنون میشم
-
من یک بار کل مایسیکوئل رو بردم روی رم، چون نیاز به یک پردازش نسبتا سنگین (تولید ۵۰۰٬۰۰۰ شماره سریال یکتا و ذخیرهش توی دیتابیس) داشتم که روی هارد معمولی بیشتر از پنج ساعت طول میکشید و بعد از انتقال مایسیکوئل به رم در حدود ۱۰ ثانیه طول کشید. >:D
مشکلی که وجود داره اینه که صرف ماونت کردن رمدیسک باعث افزایش سرعت نمیشه، باید دیتا رو به رم انتقال بدین (من دیتای مایسیکوئل رو روی رمدیسک کپی کردم و بعد آدرس جدید رو به فایل کانفیگ دادم)، یه تعداد برنامههایی که زیادتر استفاده میکنید رو انتخاب کنید، روی رم کپی کنید، آدرس جدید رو تنظیم کنید. مشخصه که زحمت زیادی میبره و احتمالا از نتیجه ناامید میشید، چون سربار IO در مصارف روزانه بهقدری نیست که کم کردنش باعث تغییر محسوسی بشه، ولی اگر نیاز به عملیاتی با تعداد درخواست بالا (مثل همون کاری که من داشتم) دارید، نتیجه در یک کلام شگفت انگیزه!
ضمنا یک مشکل دیگه هم وجود داره که خودتون هم اشاره کردین، دادههای روی رم فرّار هستن که دو تا مشکل به وجود میاره:
۱. در صورتی که به هر دلیلی سیستم بهطور ناگهانی از کار افتاد، کل اطلاعات شما از بین میره، اگر سعی کنید بهطور مرتب با هارد دیسک سینک کنید که خب اصلا نقض غرض میشه و دوباره مشکل IO دارید.
۲. با هر بار راهاندازی مجدد سیستم، باید دوباره دیتا رو روی رم کپی کنید.
بهترین روش میتونه این باشه که یک درایو SSD ابتیاع کنید! MBP من یک دونه PCIe شو داره، خیلی ازش راضیم... (:
-
به اندازه ای توان پردازشی و رم دارم که اون عملیات بک آپ گیری از رم هیچ مشکلی به وجود نمیاره و هر 30 دقیق هیک بار اطلاعات روی هارد سینک میشه
فقط این که الان این مراحل کار من درست بوده ؟
الان باید چیز هایی که میخوام رو ببرم تو اون پوشه که مونت کردم ؟
من این موارد رو توی /ect/fstab قرار دادم
proc /proc proc defaults 0 0
none /dev/pts devpts rw,gid=5,mode=620 0 0
none /run/shm tmpfs defaults 0 0
tmpfs /mnt/ramdisk tmpfs defaults,size=1420M 0 0
tmpfs /tmp tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=512M 0 0
tmpfs /var tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=1012M 0 0
tmpfs /usr/share/nginx/html tmpfs defaults,noatime,nosuid,nodev,noexec,mode=177$tmpfs /var/run tmpfs defaults,rw,nosuid,mode=0755 0 0
tmpfs /var/lock tmpfs defaults,rw,noexec,nosuid,nodev,mode=1777 0 0
ولی بازم متوجه تغیرات سرعت نشدم
من preload نصب کردم شاید با اون تداخل داره ؟
اگه میشه یه منوال خوب معرفی کنید یا مراحل کاری رو که کردین رو اگه یادتونه بنویسید چون من بد جور گیر کردم !
چند بار هم که مونت کردم کل داده پاک شدن و ریستارت که کردم دیگه اون پوشه ها رو نداشتم !
اگه میشه یه توضیح خوب بنویسید به درد خیلی ها میخوره یه منوال خوب و ساده باشه سوادمون برسه :)
-
روال رو یادم هست ولی کدها و آدرس فایلها رو نه. چیزی که توی fstab گذاشتی با چیزی که توی پست اول گفتی (اجرای مثلا فایرفاکس) فرق داره. اگر میخوای دیتای وب سرور رو روی رم داشته باشی تا سرعت بره بالا، لازم به این کار نیست، فقط دیتابیس رو روی رم منتقل کن، نتیجهش راضیت میکنه، مگر اینکه اسکریپتت بخواد هزاران فایل مثلا ۱۰ کیلوبایتی روی هارد تولید کنه که در اینصورت هم روش بهتر اینه که بهجای فایل، توی دیتابیس ذخیره کنی. اما همین تنظیمات الانت هم مشکل داره:
۱. همونطور که گفتیم رم فرّاره، شما وب روت nginx رو روی رم ماونت کردی، وقتی سعی میکنی به اطلاعات توش دسترسی پیدا کنی، کرنل محتوای فولدر روی رم رو نشون میده و رم بهخاطر فّرار بودن چیزی توش نیست، تو هم چیزی نمیبینی. همینطور هر ماونت پوینت دیگهای. اطلاعات مثل قبل روی هارد دیسک هست ولی کرنل بهجای هارد، از روی رم میخونه.
۲. لازم نیست با اضافه کردن چندین خط کد به fstab سر خودت رو درد بیاری. به غیر از / (و home/ و swap) که وضعش معلومه، tmp/ رو روی رم با سایز دلخواه ماونت کن البته tmp بهدلیل اینکه هرکسی میتونه روش بنویسه، مشکل امنیتی داره، ماونت پوینت میتونه myramdisk/ یا هر آدرس دیگهای باشه. ramdisk فقط یک اصطلاح برای این کار هستش.
روش درستتر بهاین صورت هست:
۱. توی fstab دایرکتوی tmp/ رو با حجم کم (مثلا یک گیگابایت یا کمتر) روی رم ماونت کن.
۲. یک دایرکتوری دلخواه (مثلا myramdisk/) با حجم دلخواه توی fstab روی رم ماونت کن.
۳. حالا ریبوت کن، تا اینجا تغییری انجام نشده. حالا مثلا var/ یا برای برنامهها usr/ یا opt/ رو توی myramdisk/ کپی کن. آدرسها باید مثل زیر باشن:
/myramdisk/var/cache
/myramdisk/usr/bin
/myramdisk/opt
...
حالا آدرسها رو عوض کن:
mount /var /myramdisk/var
...
البته مطمئن نیستم بشه حین اجرا، ماونت پوینت هر چیزی رو عوض کرد!
۴. حالا باید سرعتت تغییر کرده باشه. برای اینکه دیتا رو از دست ندی، هر چند دقیقه یکبار توی یک دایرکتوری روی هارد دیسک سینک کن.
۵. وقتی خواستی سیستم رو خاموش یا ریبوت کنی، دیتا رو از روی رم به هارد برگردون تا دوباره بتونی مرحله ۳ رو انجام بدی. البته میتونی کپی هم نکنی و در مرحله ۳ از دایرکتوری سینک استفاده کنی.
۶. وقتی دوباره سیستم رو روشن کردی مراحل ۲ تا ۵ رو تکرار کن.
پ.ن ۱: برای مراحل ۲ تا ۵ میتونی یک اسکریپت بنویسی که کارت راحت شه.
پ.ن ۲ : اینهایی که گفتم با tmpfs فرق داره.
پ.ن ۳: این روش بسته به دایرکتوریهایی که روی رم منتقل میکنید، نیاز به رم زیادی داره.
-
توی این لینک یارو یه اسکریپت نوشته که این کار ها رو که گفتی رو انجام میده و اسکریپت رو میدازه تو استارت آپ و خود سیستم خود کار این جینگولک بازی ها و حتی بک آپ گرفتن رو انجام میده
ولی چون قدیمی هست و جنتو با اوبونتو محل برخی فایل هاش فرق داره من به مشکل برخوردم
https://forums.gentoo.org/viewtopic-t-296892-postdays-0-postorder-asc-start-0.html