Как я могу изменить количество и размер виртуальных дисков 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/

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


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

Я действительно попробовал это, прежде чем я отправил свой вопрос. Это отличное решение, но программное обеспечение, которое я тестирую, работает по-разному, когда оно имеет дело с файлом, а не с блочным устройством, поэтому я искал вариант 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, также работают, но у вас должен быть сценарий, который периодически записывает данные на жесткий диск. У большинства администраторов нет смелости помещать данные на оперативные диски. И некоторые таблицы слишком велики.


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.