Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
Эта заметка доступна на: English  Castellano  Deutsch  Francais  Portugues  Russian  Turkce  
[Photo of the Author]
автор Mark Nielsen

Об авторе:
Марк работает независимым консультантом посвящая своё время таким вещам как GNUJobs.com, написанию статей, созданию свободных программ и работе добровольцем в eastmont.net.
Содержание:

 

Необычное использование Raid, /dev/ram и ramfs

[illustration]

Резюме:

RamFs это очень простая файловая система с интересными возможностями. Она появилась в ядре версии 2.4.



 

Введение в RamDisk

Пожалуйста обратитесь к моей статье о старом ramdisk. Она находится здесь: Linuxfocus: November1999/article124.html Я не буду вдаваться в детали старого ramdisk в этой статье.

Что такое RamDisk? RamDisk это часть памяти которую вы используете в качестве раздела. Другими словами вы берете немного памяти и притворяетесь что это диск который вы можете форматировать, монтировать, сохранять на нём файлы и т.д.

Мы будем говорить о двух типах ramdisk. Первый это ramdisk который вы можете форматировать и монтировать . Второй вы не можете форматировать, но у него есть некоторые интересные особенности. Сравним их:

Старый /dev/ram1 подход:

  1. Плохо: Размер ramdisk-а фиксируется при загрузке системы.
  2. Хорошо: Вы можете форматировать диск как хотите.
  3. Плохо: Однажды отформатированный он занимает часть памяти и я не уверен можно ли её вернуть назад.
  4. Хорошо: У вас может быть больше чем один ramdisk.
Новый виртуальный диск "ramfs":
  1. Плохо: Я не могу отформатировать его. Он находится на уровне VFS (прим. перев. Virtual FIle System - виртуальная файловая система), что бы это ни было.
  2. Хорошо: У вас их может быть больше одного.
  3. Хорошо: Вы можете изменить его максимальный размер из командной строки.
  4. Очень хорошо: Он использует только тот объём памяти, который необходим. Другими словами вы можете выделить 64 мегабайта памяти, но если на нём только 2к файлов, то он использует только 2к памяти. После того как файл удален вы сразу-же получаете больше памяти для вашего компьютера.
  5. Плохо: Ну, на самом деле это не его недостаток. Не попадитесь в ловушку заполнив два ramfs диска или вы потеряете всю память. Подробности читайте дальше.

 

Как использовать RamDisk по старому

Пожалуйста прочтите эту статью: Как использовать Ramdisk в Линуксе.

Для использования с ядром 2.0 и 2.2 , просто наберите три команды:

mkfs -t ext2 /dev/ram1
mkdir -p /RAM1
mount /dev/ram1 /RAM1
как root, и всё. Для большинства систем размер ограничен 4-мя мегабайтами. Его можно изменить во время загрузки или перекомпилировав ядро, но для этого прочитайте мою старую статью. Вы также можете добавить следующее,
mkfs -t ext2 /dev/ram2
mkdir -p /RAM2
mount /dev/ram2 /RAM2

 

Как использовать RamDisk с ramfs для ядра 2.4

Во первых, я предполагаю что у вас уже есть ядро 2.4 скомпилированное с поддержкой ramfs. Большинство основных дистрибутивов которые используют новое ядро 2.4 имеют поддержку ramfs в нём. Я использовал RedHat 7.1 для этой статьи.

Очень просто. Создайте директорию и смонтируйте в неё ramfs.

mkdir -p /RAM1
mount -t ramfs none /RAM1
Если вы хотите второй, это очень просто. Создайте директорию и смонтируйте в неё ramfs.
mkdir -p /RAM2
mount -t ramfs none /RAM2

 

Изменение размера ramdisk-ов и другие возможности.

Это пример, как сделать ramdisk размером 10 мегабайт.

mkdir -p /RAM1
mount -t ramfs none /RAM1 -o maxsize=10000
Взято прямо с http://www.linuxhq.com/kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
+       ramfs - Файловая система базирующаяся в памяти
+               и автоматически изменяющая размер.
+
+
+  Ramfs это файловая система которая хранит все свои файлы в памяти,
+  доступна для чтения и записи. В отличии от RAM дисков, которые
+  занимают фиксированный объём памяти, ramfs увеличивается и
+  уменьшается вместе с файлами, содержащимися в ней.
+
+  Вы можете смонтировать ramfs так:
+      mount -t ramfs none /mnt/гдето
+
+  Теперь просто создавайте и используйте файлы. После размонтирования
+  файловой системы всё её содержимое будет потеряно.
+
+  ЗАМЕЧАНИЕ! Эта файловая система предназначена скорее не для
+  использования, а как пример того, как виртуальная файловая
+  система может быть написана.
+
+Ограничение ресурсов:
+
+По умолчанию одна ramfs использует максимум половину физической
+памяти для хранения файлов, чуть больше, чем объём файлов,
+содержащихся в ней. Можно ограничить использование ресурсов
+с помощью параметров монтирования:
+
+       maxsize=NNN
+               Устанавливает максимальный объём ramfs NNN килобайт.
+По умолчанию это половина физической памяти. Примечание: в отличие
+от многих других ограничений установка этого в 0 не означает
+отсутствия лимита а действительно устанавливает лимит в 0 страниц.
+Это может быть использовано для различных трюков.
+
+       maxfilesize=NNN
+               Устанавливает максимальный размер любого файла в
+этой файловой системе в NNN килобайт. Это число округляется вниз
+до ближайшего кратного размеру страницы. Если NNN равно 0 то
+лимит отсутствует. По умолчанию лимит отсутствует.
+
+       maxdentries=NNN
+               Устанавливает максимальное количество элементов в
+директории (твёрдых линков) в этой файловой системе равным NNN.
+Если NNN равно 0, то лимита нет. По умолчанию он установлен как
+maxsize/4.
+
+       maxinodes=NNN
+               Устанавливает максимальное количество и-нодов
+(явных файлов) на файловой системе в NNN. Если NNN равно 0,
+то лимит отсутствует. По умолчанию этого лимита нет, но это
+число всё равно не может быть больше чем dentries.

 

Запуск сервисов на RamDisk

У меня есть мысль. Так что слушайте внимательно. Не было-бы здорово запускать ваши сервисы (такие как веб сервер, сервер баз данных или DNS сервер) на ramdisk? Обычно стандартный веб сервер не содержит много больших файлов. Обычно DNS сервер также не содержит много файлов. Вы даже можете поместить сервер баз данных в память если он вам нужен только для хранения временных данных.

Память дешева сейчас. Недавно я купил 128 мегабайт памяти за 120 долларов, и я думаю что цены на память будут продолжать падать. Я могу легко поместить любой из моих веб серверов в 128 мегабайт памяти. Если сервер содержит большие файлы, то я могу сконфигурировать httpd.conf так, чтобы он брал их из другого каталога, не из RAM диска. Мой DNS сервер очень маленький. Моя самая большая база данных занимает всего 28 мегабайт. Учитывая тот факт, что вы можете приобрести сегодня гигабайт памяти не так уж и дорого, я думаю, что это было бы классно запускать всё из памяти. Единстенный недостаток с сервером баз данных это то, что нужно сначала запоминать изменения в другой базе данных и только потом заносить их в базу, хранящуюся в памяти. Это медленно, но учитывая, что чаще нужно читать из базы, чем записывать это должно увеличить скорость работы. Это возможно, если мы сможем зазеркалировать RAM диск на винчестер.

Я уже объяснял это в предыдущей статье, так что читайте здесь:http://www.gnujobs.com/mark/articles/Ramdisk.html#Example. Просто замените команды

        ### Создать разделы ramdisk
/sbin/mkfs -t ext2 /dev/ram0
/sbin/mkfs -t ext2 /dev/ram1
/sbin/mkfs -t ext2 /dev/ram2

        ### Снонтировать ram диски в нужные места

mount /dev/ram0 /home/httpd/cgi-bin
mount /dev/ram1 /home/httpd/icons
mount /dev/ram2 /home/httpd/html

на эти команды (увеличьте числа, если 10 мегабайт недостаточно):
mount -t ramfs none /home/httpd/cgi-bin -o maxsize=10000
mount -t ramfs none /home/httpd/icons -o maxsize=10000
mount -t ramfs none /home/httpd/html -o maxsize=10000

 

Ramdisk и Райд

Как мы можем скомбинировать раздел на диске с разделом в памяти в райд раздел? Я не знаю. Но это может быть очень полезным. Умная операционная система не избегает чего-то только потому, что из этого нельзя извлечь немедленную пользу. Именно поэтому многие коммерческие операционные системы стали непопулярными и почему свободные программы занимают место приложений написанных идиотами которых интересуют только деньги а не технология.

Есть три проблемы при комбинировании ram диска и раздела на жёстком диске.

  1. Я не знаю как сделать это с ramfs, но я могу сделать это с /dev/ram. Если вы сможете отформатировать раздел винчестера с той-же файловой системой, которую использует ramfs, то у вас всё получится. Я понятия не имею, что такое уровень VFS, так что возможно я изучу это позже.
  2. Если зеркальный raid работает действительно парралельно, то дополнительная скорость работы памяти не помогает. Я не знаю, возможно ли сделать зеркалируемый raid так, чтобы чтение производилось только из ram диска. В любом случае, если это возможно, то это даст выигрыш в производительности.
  3. После перезагрузки нужно реконструировать ram диск .
Для запуска raid я настроил мой /etc/raidtab так:
  raiddev /dev/md3
          raid-level      1
          nr-raid-disks   2
          nr-spare-disks  0
          chunk-size     4
          persistent-superblock 1
          device          /dev/hdb6
          raid-disk       1
          device          /dev/ram3
          raid-disk       0
После этого я запустил следующие команды,
mkraid /dev/md3
mkfs -t ext2 /dev/md3
mkdir -p /RAID1
mount /dev/md3 /RAID1
Проблема в том, что до перезагрузки ram диск не существует. Ну а после перезагрузки,
raidstart /dev/md3
raidhotadd /dev/md3 /dev/ram3
mount /dev/md3 /RAID1
Теперь запомните, что если вы не перенастроили ваши ram диски на размер больше 4-х мегабайт, то бессмысленно соединять их в raid с разделом на диске большем, чем 4 мегабайта.

Это будет здорово иметь зеркалированный raid с тремя разделами. Первый это ram диск и два других это разделы на винчестере, еще бы сделать так, чтобы чтение производилось только с ram диска. Я не знаю, возможно ли настроить чтение только с одного раздела в raid, но это было-бы здорово.


 

Комментарии

Это наверное самая важная часть этой статьи. Я люблю Линукс потому, что он позволяет вам выстрелить себе в ногу. Нет ничего лучше боли, что заставит вас учиться.
  1. Ramfs по умолчанию использует до половины физической памяти (не свопа). Так что если вы создадите два таких раздела и заполните их полностью, то компьютер исчерпает всю свою память и зависнет как это сделал мой. ПОЖАЛУЙСТА указывайте максимальный размер ram диска так, как это объяснено выше.
  2. Я полагаю, что ramfs использует свой собственный формат, а не формат ext2, так что если вы копируете файлы туда-сюда используя rsync или tar то не ожидайте что файлы будут идентичны или того-же самого размера. Скорее всего вы не увидите больших различий в использовании ramfs, но так как это не ext2, их свойства могут различаться на каком-то уровне.
  3. Я прочитал документацию к ramfs и незаметно, что она предназначена для широкого использования, но я не понял почему. Это ведь работает так, как я хочу.
Я ещё не закончил с ram дисками.
  1. Я бы хотел посмотреть, смогу ли я объединить в raid ramfs и диск.
  2. Смогу ли я добиться чтобы чтение из такого raid производилось только из одного раздела.
  3. Поместить один из сервисов, например веб сервер, на ramdisk с raid. Хитрость тут в том, чтобы использовать raid так, чтобы все изменения сохранялись. Именно поэтому raid настолько важен для меня ---- я смогу БЕЗОПАСНО помещать сервисы в память и достичь выигрыша в производительности включая:
  4. Настроить компьютер для загрузки с сидирома, запустить сервис и скачать изменения с сети. Винчестер не нужен. Это должно быть классно. Теперь можно запустить вебсервер (или что-то другое) на компьютере без винчестера, только с памятью и сидиромом. Если вы увеличите память до гигабайта, то почему бы не запускать всю систему с сидирома? Это было-бы хорошо с точки зрения безопасности. Просто перезагрузите компьютер, пусть он загрузит изменения (апдейты) с безопасного ресурса, потом запустит сервисы, и вот ваш компьютер чист и свободен от хаков. Веб сервер может не сохранять ничего на локальный компьтер, только загружать логи и информацию на другой компьютер через защищённое соединение или локальную сеть. В прошлом я создавал загрузочные сидиромы с ramdisk-ами. Было бы здорово с помошью прошлого опыта добиться вышеизложенного.
 

Ресурсы

  1. kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
  2. http://genericbooks.com/LDP/HOWTO/Software-RAID-HOWTO.html
  3. Ускорение работы маленьких баз данных под Линуксом
  4. Как использовать Ramdisk для Линукса
  5. Если эта статья изменится, то она будет доступна тут: http://www.gnujobs.com/Articles/21/Ramdisk2.html

Спасибо Кате за помошь!

Копирайт © 4/2001 Марк Нильсен
Версия статьи 1.3 : Последнее изменение Суббота 19 Мая 2001 06:04:06

 

Страница отзывов

У каждой заметки есть страница отзывов. На этой странице вы можете оставить свой комментарий или просмотреть комментарии других читателей.
 talkback page 

Webpages maintained by the LinuxFocus Editor team
© Mark Nielsen, FDL
LinuxFocus.org

Click here to report a fault or send a comment to LinuxFocus
Translation information:
en -> -- Mark Nielsen
en -> ru

2001-07-28, generated by lfparser version 2.17