27

В Linux, когда я загружаюсь, у меня автоматически 16 16 МБ RAM-дисков, однако я хотел бы создать один очень большой RAM-диск для тестирования некоторого программного обеспечения.

Я обнаружил, что могу настроить размер ramdisk уже в системе с помощью параметра загрузки ядра ramdisk_size однако это делает все 16 ram-дисков (/dev/ram0 - /dev/ram15) указанным размером. Поэтому, если я хочу создать виртуальный диск емкостью 1 ГБ, мне потребуется 16 ГБ памяти.

По сути, я хочу создать один ramdisk 10 ГБ, который будет /dev /ram0. Как бы я поступил так? Я предполагаю, что есть параметр загрузки ядра, но я просто не нашел его.

7 ответов7

18

Время компиляции ядра

Есть два параметра конфигурации ядра, которые вы можете установить в своем файле .config :

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

Это настроило мое ядро для создания одного виртуального диска 10G во время загрузки.

Заметки:

  • CONFIG_BLK_DEV_RAM_SIZE в КБ.
  • Не указывайте больше памяти, чем у вас есть на вашем компьютере.
  • В menuconfig смотрите в разделе «Драйверы устройств» -> «Блокировать устройства».

Время загрузки

Вы можете указать размер создаваемых ram-дисков с помощью параметра загрузки ядра ramdisk_size . Например:

kernel /vmlinuz-2.6.32.24 ro root=LABEL=/ rhgb quiet ramdisk_size=10485760

Теперь я могу загрузить свою машину и создать на ней файловую систему, смонтировать ее и использовать точно так же, как блочное устройство.

# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk

Источники:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html [dead]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt
16

Вместо этого вы должны использовать tmpfs .

mount -t tmpfs -o size=10g none /mnt/point
7

Сделать большой RAM-диск после загрузки без возни с параметрами ядра. Используйте tmpfs, создайте файл, смонтируйте его через цикл и смонтируйте его через файловую систему:

mount -t tmpfs -o size=200M tmpfs temp/
cd temp/
dd if=/dev/zero of=disk.img bs=1M count=199
losetup /dev/loop0 disk.img
mkfs.ext4 /dev/loop0
cd ..
mount /dev/loop0 temp2/

Вероятно, небольшое снижение производительности проходит через несколько разных слоев ... но, по крайней мере, это работает.

6

Другой вариант - использовать петлевые устройства (в отличие от функции монтирования loobpack, как упоминалось ранее):

dd if=dev/zero of=myfs.img bs=1M count=1024
losetup /dev/loop0 myfs.img
mkfs.xfs /dev/loop0

Теперь /dev /loop - это законное блочное устройство, на которое ваше приложение будет действовать, как физическое устройство или виртуальный диск, за исключением того, что оно имеет файловую резервную копию. Вы можете смонтировать где-нибудь или сделать так, чтобы приложение воздействовало на узел устройства, который реализует стандартный блок ioctls. Сохраняет системную память и полезен для тестовых случаев и т.д.

(Вы можете даже fdisk myfs.img, создать на нем разделы и использовать --offset и --sizelimit с losttup для указания каждого /dev /loopX на определенные разделы в образе, поэтому loop0, loop1 становятся такими же, как sdc1, sdc2 и т.д. )

3

Вы могли бы использовать файл цикла вместо этого. Просто создайте файл цикла нужного вам размера (если вы хотите поместить его в ramdisk tmpfs, хорошо), а затем отформатируйте файл цикла и смонтируйте его.

dd if=/dev/zero of=myfile bs=1G count=10
mkfs.xfs -d file myfile
mount -t xfs -o loop myfile mymntpoint
2

Объект ramdrive это скорость. Tmpfs это не диск. Петлевые устройства не являются дисками, но вы можете поместить образ диска на петлевое устройство. Оперативные диски "являются" дисками и очень быстрыми дисками. Попробуйте запустить:

hdparm -t /dev/sda 

а потом:

hdparm -t /dev/ram0

Вы поймете, что я имею в виду! Но hdparm иногда разрушает оперативную память. Итак, вы должны сделать это снова.

Иногда нет устройств /dev /ram. Чтобы сделать один:

mknod -m 0777 /dev/ram0 b 1 0 

но это не будет иметь никакого размера. Чтобы дать ему размер:

dd if=/dev/zero of=/dev/ram0

и он остановится, когда диск будет заполнен. Максимальный размер определяется параметром конфигурации ядра: CONFIG_BLK_DEV_RAM_SIZE .

Затем просто отформатируйте его, т.е.

mke2fs /dev/ram0

И смонтировать его:

mount /dev/ram0 /mnt/ramdrive

Мой фаворит - отладка кода, хранящегося на ramdrive. Компиляция имеет как минимум 10-кратную скорость кода, хранящегося на жестком диске. Таблицы базы данных, хранящиеся на ramdrive, также работают, но у вас должен быть сценарий, который периодически записывает данные на жесткий диск. У большинства администраторов нет смелости размещать данные на оперативных дисках. И некоторые таблицы слишком велики.

1

На Маяке 64 (Puupy Linux на основе Slackware) я сделал это;

mke2fs /dev/ram1 4096000 # nearly 4G ramdisk, choose the size of ramdisk less than actual ram!
mount /dev/ram1 /mnt/dvd # dvd on my laptop is unused choose your device from /mnt/

Там у вас есть виртуальный диск, смонтированный в виде директории /mnt/dvd куда вы можете скопировать и вставить вставить, сохраняя все как в директории hd, кроме ram. не забудьте сохранить ваши файлы на hd перед выключением.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .