Пример 28-3. Создание электронного диска

Пример 28-3. Создание электронного диска

#!/bin/bash

# ramdisk.sh

# "электронный диск" -- это область в ОЗУ компьютера

#+ с которой система взаимодействует как с файловой системой.

# Основное преимущество -- очень высокая скорость чтения/записи.

# Недостатки -- энергозависимость, уменьшение объема ОЗУ, доступного системе,

# относительно небольшой размер.

#

# Чем хорош электронный диск?

# При хранении наборов данных, таких как таблиц баз данных или словарей, на электронном диске

#+ вы получаете высокую скорость работы с этими наборами, поскольку время доступа к ОЗУ

# неизмеримо меньше времени доступа к жесткому диску.

E_NON_ROOT_USER=70 # Сценарий должен запускаться с правами root.

ROOTUSER_NAME=root

MOUNTPT=/mnt/ramdisk

SIZE=2000 # 2K блоков (измените, если это необходимо)

BLOCKSIZE=1024 # размер блока -- 1K (1024 байт)

DEVICE=/dev/ram0 # Первое устройство ram

username=`id -nu`

if [ "$username" != "$ROOTUSER_NAME" ]

then

echo "Сценарий должен запускаться с правами root."

exit $E_NON_ROOT_USER

fi

if [ ! -d "$MOUNTPT" ] # Проверка наличия точки монтирования,

then #+ благодаря этой проверке, при повторных запусках сценария

mkdir $MOUNTPT #+ ошибки возникать не будет.

fi

dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE # Очистить электронный диск.

mke2fs $DEVICE # Создать файловую систему ext2.

mount $DEVICE $MOUNTPT # Смонтировать.

chmod 777 $MOUNTPT # Сделать электронный диск доступным для обычных пользователей.

# Но при этом, только root сможет его отмонтировать.

echo "Электронный диск "$MOUNTPT" готов к работе."

# Теперь электронный диск доступен для любого пользователя в системе.

# Внимание! Электронный диск -- это энергозависимое устройство! Все данные, хранящиеся на нем,

#+ будут утеряны при остановке или перезагрузке системы.

# Если эти данные представляют для вас интерес, то сохраняйте их копии в обычном каталоге.

# После перезагрузки, чтобы вновь создать электронный диск, запустите этот сценарий.

# Простое монтирование /mnt/ramdisk, без выполнения подготовительных действий, не будет работать.

exit 0