
При загрузке Linux у меня автоматически появляются 16 виртуальных дисков по 16 МБ, однако я хотел бы создать один действительно большой виртуальный диск для тестирования некоторого программного обеспечения.
Я обнаружил, что могу настроить размер ramdisk, уже имеющихся в системе, с помощью параметра загрузки ядра, ramdisk_size
однако это делает все 16 ramdisk (/dev/ram0 - /dev/ram15) указанного размера. Так что если я хочу создать ramdisk размером 1 ГБ, мне понадобится 16 ГБ памяти.
В принципе, я хочу создать один 10 ГБ ramdisk, который будет /dev/ram0. Как мне это сделать? Я предполагаю, что есть параметр загрузки ядра, но я просто не нашел его.
решение1
Время компиляции ядра
В файле можно задать два параметра конфигурации ядра .config
:
CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760
Это настроило мое ядро на создание одного RAM-диска размером 10 ГБ во время загрузки.
Примечания:
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
Источники:
решение2
Вам следует использоватьtmpfsдля этого вместо этого.
mount -t tmpfs -o size=10g none /mnt/point
решение3
Чтобы создать большой ram disk после загрузки, не возясь с параметрами ядра. Используйте tmpfs, создайте файл, смонтируйте его через loop и смонтируйте его через файловую систему:
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/
Возможно, немного снизится производительность из-за прохождения нескольких различных слоев... но, по крайней мере, это работает.
решение4
Цель ramdrive — скорость. Tmpfs — это не диск. Устройства Loop — это не диски, но вы можете поместить образ диска на устройство Loop. Ram-диски «являются» дисками, и очень быстрыми дисками. Попробуйте запустить:
hdparm -t /dev/sda
а потом:
hdparm -t /dev/ram0
Вы поймете, что я имею в виду! Но hdparm иногда уничтожает ram-диск. Так что вам придется сделать его снова.
Иногда нет устройств /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, тоже летают, но у вас должен быть скрипт, который периодически записывает данные на жесткий диск. Большинство администраторов не решаются помещать данные на ram disks. А некоторые таблицы слишком велики.