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

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

При загрузке 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

Источники:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html[мертвый]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt

решение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. А некоторые таблицы слишком велики.

Связанный контент