2013-02-21 8 views
0

Я пытаюсь автоматически определить размер файловой системы ramdisk ext2, которую создаст каталог. То, что я сейчас делаю это:Сделать файловую систему ext2 из каталога, используемого в качестве ramdisk

BLOCK_COUNT=`du $RAMDISK_FS_DIR| tail -1 |awk '{print $1}' 

dd if=/dev/zero of=ramdisk.img bs=1024 count=$BLOCK_COUNT 
mke2fs -F ramdisk.img -L "ramdisk" -b 1024 -m 0 
tune2fs ramdisk.img -i 0 

Но когда я устанавливаю и cp -r$RAMDISK_FS_DIR в ramdisk.img я получаю сообщение, как эти

cp: cannot create directory `ramdisk/var/www': No space left on device 

Я определил, что в моем этом конкретном случае увеличения BLOCK_COUNT 48 блоков точно сколько мне нужно для успешной операции. Мне нужен способ найти этот номер для произвольных размеров каталога.

Обратите внимание, что файловая система моего хоста - ext4.

+1

Я не понимаю, что '| grep 'fs $' 'делает. Вы имели в виду использовать 'du -s'? – Celada

+0

my bad i meand 'tail -1' – fakedrake

ответ

2

Я не думаю, что есть хороший способ сделать это в целом. В общем, суперблоки, таблицы inode, блочные растровые изображения и различные другие структуры в файловой системе будут варьироваться в зависимости от того, насколько велика файловая система и что в ней находится. Даже пространство, занимаемое файлами (рассчитанное du), может быть не таким же в исходной файловой системе, как в целевой файловой системе.

Интересно, почему вы пытаетесь создать файловую систему с размером, точно равным его содержимому. Поскольку эта файловая система всегда будет заполнена после ее создания, вы не сможете ничего добавить к ней (если вы сначала не удалите материал), что заставляет меня думать, что это может быть предназначено только для чтения. Покупайте, если он доступен только для чтения, почему бы вам не использовать тип файловой системы, например cramfs или squashfs, который специально предназначен для такого рода приложений?

+0

Действительно, он предназначен только для чтения, я смогу подключить записываемые разделы через nfs, для изменения типа fs потребуются модификации ядра? – fakedrake

+0

Я решил, что было бы удобно, чтобы файловая система была доступна для записи из устройства, поэтому я просто позволю себе 100 000 дополнительных пространств на выходе du. Я надеюсь, что это не сломается позже – fakedrake