Как я могу изменить количество и размер виртуальных дисков Linux (/ dev / ram0 - / dev / ram15)?

27

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

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

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

Кевин С.
источник

Ответы:

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
Игнасио Васкес-Абрамс
источник
Могу ли я создать файловую систему на tmpfs? Мне нужно блочное устройство, которое находится в памяти, на котором я могу создать файловую систему. Могу ли я сделать это на TMPFS?
Кевин С.
tmpfs - это файловая система. Это просто происходит в памяти.
Игнасио Васкес-Абрамс
3
Я ценю ответ, и обычно tmpfs справился бы с задачей, но мне нужно создать файловую систему xfs на той части памяти, в которую я пишу.
Кевин С.
Проблема с tmpfs заключается в том, что он поддерживается swap. Если вы начнете использовать своп, то вы потеряете преимущества наличия чистой оперативной памяти. Кроме того, некоторые люди предпочитают иметь область, которая не поддерживается криптографическими приложениями.
drudru
Соответствующие ответы и подробности можно найти здесь: unix.stackexchange.com/questions/66329/…
jocull
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/

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

user39725
источник
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 и т. Д. )

Дэвид Мирабито
источник
+1, так как для этого не нужно перекомпилировать ядро
m-ric
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
KFro
источник
Я действительно попробовал это, прежде чем я отправил свой вопрос. Это отличное решение, но программное обеспечение, которое я тестирую, работает по-разному, когда оно имеет дело с файлом, а не с блочным устройством, поэтому я искал вариант ramdisk. Спасибо.
Кевин С.
2
Устройства с обратной связью являются блочными устройствами, поэтому я не уверен, как это возможно?
pjc50
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

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

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

mke2fs /dev/ram0

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

mount /dev/ram0 /mnt/ramdrive

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

Swansword
источник
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 перед выключением.

Marcos
источник