Хостинг В Украине бесплатно
Початок розділу
Найкращий, з відомих мені, українських сайтів де можна придбати диск з будь-яким Linux
Найкращий, з відомих мені, українських сайтів де можна придбати диск з будь-яким Linux
linux.org.ua -- Linux/UNIX news
Український Linux на базі Slackware
Кращий браузер — Mozilla Firefox
Extensions.org.ua - українізовані розширення Frenzy - LiveCD на основе FreeBSD
Comp(OS)It
Пиши українською Linux.SU - Линукс в пять минут!
Сайт live дистрибутиву SLAX.
7-Zip
META-Ukraine
Портал Укрнет

Використання блочного пристрою RAM диску з Linux

Зміст:
  1. Стислий огляд
  2. Параметри командного рядку ядра
  3. Використання "rdev -r" з новими ядрами
  4. Приклад створення стиснутого RAM диску

1) Стислий огляд

     З ядра v1.3.48, драйвер RAM диску було суттєво змінено.

     Старі версії під час завантаження захоплювали частину пам'яті зверху, перед переданням залишку ядру. Таким чином параметр розміру повинен бути вказаний через "ramdisk=1440" чи "rdev -r /dev/fd0 1440" так щоб драйвер знав скільки пам'яті захоплювати.

     Тепер RAM диск динамічно росте на стільки простору скільки йому треба. It does this by using RAM from the buffer cache. Драйвер відмічає буфери, які він використовує новим прапором "BH_Protected" так щоб ядро не намагалося багаторазово використовувати їх пізніше. Це означає що старий параметр розміру більше не використовується, існує новий параметр командного рядку і поведінка команд "rdev -r" та "ramsize" (звичайне символічне посилання на "rdev") змінилась.

     Також нова підтримка RAM диску до 16 RAM дисків прямо з коробки і може бути змінено у rd.c до 255 RAM дисків. Щоб використовувати підтримку багатьох RAM дисків у вашій системі, запустіть 'mknod /dev/ramX b 1 X' і chmod (щоб змінити дозволи) як вам подобається. За умовчанням /dev/ram(disk) використовує minor #1, так що починайте з ram2 і далі йдіть звідти.

     Старе "ramdisk=" було замінено на "ramdisk_size=", щоб зробити це більш зрозумілим. Оригінальний "ramdisk=" було збережено з міркувань сумісності, але він, імовірно, буде видалений у 2.1.x.

     Новий RAM диск також має можливість завантажувати стиснений образ RAM диску, дозволяючи стискати великі додатки на середній інсталяційний чи гнучкий диск для відновлення.

     Зауваження: Ви можете мати "/dev/ram" або "/dev/ramdisk" чи обидва. Вони дорівнюють з точки зоро цього документу. Також новий RAM це опція яка налаштовується. Коли запускається "make config" перевірте, що ви дозволили підтримку RAM диску для ядра з яким ви збираєтесь використовувати RAM диск.

Вгору

2) Параметри командного рядку

ramdisk_start=NNN

     Щоб дозволити образу ядра постійно знаходитись на гнучкому диску разом зі стисненим образом RAM диску, додайте команду "ramdisk_start=". Ядро не може бути частиною образу стисненої файлової системи RAM диску, тому що воно повинно бути збережено починаючи з нульового блоку, так щоб BIOS була спроможна завантажити завантажувальний сектор і потім ядро мало б змогу завантажити себе щоб почати роботу.

     Зауваження: Якщо ви використовуєте не стиснений образ RAM диску, тоді ядро може бути частиною файлової системи образу, яке завантажується у RAM диск і гнучкий диск може бути завантажений з LILO чи вони можуть бути окремими як це зроблено для стисненого образу.

     Якщо ви використовуєте встановлення з двох дисків boot/root (ядро на №1, образ RAM диску на №2), тоді RAM повинен починатися на нульовому блоці і потрібно використовувати нульовий зсув. Так як це значення за умовчанням, фактично цю команду взагалі можна не використовувати.

     Якщо замість цього в вас є "zImage" десь 350 kB та "fs_image.gz" десь у 1 MB та ви бажаєте розташувати їх обидва на одному диску, тоді ви повинні використовувати зсув. Якщо ви зберегли "fs_image.gz" на гнучкий диск починаючи з зсуву у 400 kB ви повинні використовувати "ramdisk_start=400".

load_ramdisk=N

     Цей параметр каже ядру чи повинно воно намагатися завантажити образ RAM диску чи ні. Вказавши "load_ramdisk=1" ви кажете ядру завантажувати гнучкий диск у RAM диск. Значення за умовчанням нуль, означає що ядро не повинно намагатися завантажувати RAM диск.

prompt_ramdisk=N

     Цей параметр каже ядру надавати чи ні підказку, яка прохає вас вставити гнучкий диск, якій містить образ RAM диску. При використанні одного гнучкого диску образ RAM диску на тому самому гнучкому диску, що й ядро, яке лише закінчило loading/booting і тому підказка не потрібна. У цьому випадку можна використовувати "prompt_ramdisk=0". При використанні двох гнучких дисків, вам буде необхідна можливість замінити диски і тому можна використовувати "prompt_ramdisk=1". Так як це значення за умовчанням його можна не вказувати.

ramdisk_size=N

     Цей параметр каже драйверу RAM диску встановити RAM диск розміром у в N k. За умовчанням це 4096 (4 MB).

Вгору

3) Використання "rdev -r" з новими ядрами

     Вживання слова (два байти), що його встановлено "rdev -r" у образі ядра, змінилось. Молодші 11 біт (0 -> 10) визначають зсув (блоками по 1k) до 2 MB (2^11) де шукати RAM диск (це використовується для розміру). Біт 14 вказує, що RAM диск буде завантажено і біт 15 вказує чи давати послідовність підказка/очикування перед спробою прочитати RAM диск. Оскільки RAM-диск динамічно збільшується, коли на нього пишуться дані, поле розміру більше не потрібно. Біти з 11 до 13 зараз не використовуються і можуть бути нулями. Ці числа не магічні таємниці, що показано нижче:

./arch/i386/kernel/setup.c:#define RAMDISK_IMAGE_START_MASK 0x07FF
./arch/i386/kernel/setup.c:#define RAMDISK_PROMPT_FLAG 0x8000
./arch/i386/kernel/setup.c:#define RAMDISK_LOAD_FLAG 0x4000

     Розглянемо типове встановлення на двох гнучких дисках, де ядро в нас буде на першому диску і образ RAM диску вже розміщено на другому диску.

     Отже вам необхідно встановити біти з 0 до 13 як 0, що означає, що RAM диск починається з суву у 0 kB від початку гнучкого диску. Еквівалент з командного рядку це: "ramdisk_start=0".

     Вам необхідно встановити біт 14 як одиницю, вказуючи, що RAM диск потрібно завантажити. Еквівалент з командного рядку це: "load_ramdisk=1".

     Вам потрібно встановити біт 15 як одиницю, вказуючи, що ви бажаєте підказку/натиснення клавіші так, щоб мати змогу замінити гнучкий диск. Еквівалент з командного рядку це: "prompt_ramdisk=1".

     Сполучення цього разом дає 2^15 + 2^14 + 0 = 49152 для слова rdev. Отже щоб створити один диск з набору вам необхідно виконати:

/usr/src/linux# cat arch/i386/boot/zImage > /dev/fd0
/usr/src/linux# rdev /dev/fd0 /dev/fd0
/usr/src/linux# rdev -r /dev/fd0 49152

     Якщо ви створюєте завантажувальний диск, який має LILO, тоді для вказаного вище вам необхідно використовувати:

append = "ramdisk_start=0 load_ramdisk=1 prompt_ramdisk=1"

     З того часу як за умовчанням завдано start = 0 та prompt = 1, ви можете використовувати:

append = "load_ramdisk=1"
Вгору

4) Приклад створення стисненого RAM диску

     Щоб створити образ RAM диску, ви потребуєте вільний блочний пристрій, на якому ви його створите. Це може бути сам пристрій RAM диску чи розділ диску, якій не використовується (такий як розмонтований розділ підкачки). Для цього прикладу ми будемо використовувати пристрій RAM диску "/dev/ram".

     Зауваження: Цей метод не може бути завершений на машині з менш ніж 8 MB ОЗП. При використанні вільного розділу диску замість /dev/ram це обмеження не використовується.

     а) Оберіть розмір RAM диску за вашим бажанням. Скажімо 2 MB для цього прикладу. Створіть його записавши на пристрій RAM диску. (На цей час цей крок вам не потрібен, але можливо у майбутньому). Мудро заповнити нулями область (особливо для дисків) так, щоб досягти максимального стиснення для блоків, які не використовуються, образу, який ви збираєтесь створювати.

dd if=/dev/zero of=/dev/ram bs=1k count=2048

     b) Створіть файлову систему на ньому. Скажімо ext2fs для цього прикладу.

mke2fs -vm0 /dev/ram 2048

     c) Змонтуйте його, скопіюйте файли, які ви бажаєте бачити на ньому (наприклад: /etc/* /dev/* ...) і розмонтуйте його знов.

     d) Стисніть вміст RAM диску. Рівень стиснення буде приблизно 50% від простору зайнятого файлами. Невикористаний простір на RAM диску буде стиснено майже до нічого.

dd if=/dev/ram bs=1k count=2048 | gzip -v9 > /tmp/ram_image.gz

     e) Розташуйте ядро на гнучкому диску.

dd if=zImage of=/dev/fd0 bs=1k

     f) Розташуйте образ RAM диску на гнучкому диску після ядру. Використовуйте зсув трохи більше за ядро, так щоб ви могли розташувати інше (можливо більше) ядро на цей самий гнучкий диск пізніше без накладення на образ RAM диску. Зсув у 400 kB для ядра розміром приблизно 350 kB був би розумним. Перевірте що зсув+розмір ram_image.gz не перевищує розміру гнучкого диску (звичайно 1440 kB).

dd if=/tmp/ram_image.gz of=/dev/fd0 bs=1k seek=400

     g) Використовуйте "rdev" щоб встановити пристрій завантаження, зсув RAM, прапорець підказки і таке інше. Для prompt_ramdisk=1, load_ramdisk=1, ramdisk_start=400, можно було б мати 2^15 + 2^14 + 400 = 49552.

rdev /dev/fd0 /dev/fd0
rdev -r /dev/fd0 49552

     Це все. В вас тепер є ваш гнучкий диск з boot/root стисненим RAM диском. Деякі користувачі забажають скомбінувати кроки (d) та (f) використовуючи pipe.

Вгору

Paul Gortmaker 12/95

Переклад Lucifer (Рукавишников Віталій С.) 28.08.2005 0:00

Linux coutner Український рейтинг TOP.TOPUA.NET