2013-02-21 57 views
0

我试图自动确定目录将创建的ext2虚拟硬盘文件系统的大小。什么我目前做的是:使ext2文件系统脱离目录以用作虚拟硬盘

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_DIRramdisk.img我得到这样的

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

我确定的消息,在我这个特定情况下增加了48块BLOCK_COUNT正是我需要多少操作才能成功。我需要一种方法来查找任意目录大小的这个数字。

请注意,我的主机文件系统是ext4。

+1

我不明白是什么'| | grep'fs $''在做。你的意思是使用du -s吗? – Celada 2013-02-21 13:55:27

+0

我的坏我meand'tail -1' – fakedrake 2013-02-21 14:06:32

回答

2

我不认为有一个很好的方法来做到这一点。通常,文件系统中的超级块,inode表,块位图以及其他各种结构的大小会有所不同,具体取决于文件系统的大小及其内容。甚至文件占用的空间(如du所计算的)在源文件系统上可能与目标文件系统上的不同。

我想知道为什么你要制作一个大小与其内容完全相同的文件系统。由于这个文件系统在构建完成后将始终保持完整状态,因此不能向其中添加任何内容(除非先删除内容),这使我认为它可能只是只读的。如果它是只读的,购买它,为什么不使用文件系统类型,如cramfssquashfs专门用于此类应用程序?

+0

事实上,它的目的是只读,我会通过NFS挂载可写部分,会改变fs类型需要内核修改? – fakedrake 2013-02-21 14:13:16

+0

我决定将文件系统从设备中写入是很方便的,所以我只是在du的输出上留下了100K的额外空间。我希望这不会稍后中断 – fakedrake 2013-02-21 15:07:42