Создаем пустой файл заполненный нулями:
dd if=/dev/zero of=partition.img bs=512 count=1000000
1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB) copied, 1.6735 s, 306 MB/s
Теперь совершенно стандартным способом создаем файловую систему в файле:
mkfs.ext3 partition.img
mke2fs 1.41.12 (17-May-2010)
partition.img is not a block special device.
Proceed anyway? (y,n) y
warning: 287 blocks unused.
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
125416 inodes, 499713 blocks
25000 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
61 block groups
8192 blocks per group, 8192 fragments per group
2056 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
Утилита file подтверждает наличие файловой системы в файле:
file partition.img
partition.img: Linux rev 1.0 ext3 filesystem data, UUID=9b90cdcd-967c-452c-baa4-e1ac839f6bde
А утилита mount его прекрасно монтирует:
{code}mount -o loop partition.img /mnt
{code}
df -h | egrep 'File|loop'
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 473M 11M 438M 3% /mnt
Отмонтируем:
umount /dev/loop0
Но как представить обычный файл как полноценное блочное устройство без создания на нем какой-либо файловой системы? Тут нам на помощь приходит losetup!
Создаем пустой бинарный файл как и в предыдущий раз:
dd if=/dev/zero of=partition.img bs=512 count=1000000
1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB) copied, 1.66248 s, 308 MB/s
И подключаем его как полноценное блочное устройство:
losetup /dev/loop0 partition.img
Вуаля, теперь с содержимым файла можно работать как с обычным блочным устрйоством:
file /dev/loop0
/dev/loop0: block special
Создаем файловую систему:
mkfs.ext3 /dev/loop0
mke2fs 1.41.12 (17-May-2010)
warning: 287 blocks unused.
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
125416 inodes, 499713 blocks
25000 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
61 block groups
8192 blocks per group, 8192 fragments per group
2056 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
Монтируем:
mount /dev/loop0 /mnt
И получаем тот же самый эффект, что и при прямом монтировании файла:
df -h | grep loop
/dev/loop0 473M 11M 438M 3% /mnt
Но при этом, мы можем работать с образом напрямую, без файловой системы и любыми утилитами, которые поддерживают работы с блочными устройствами (но при этом, ничего не знают о файлах).
Теперь пришел черед отмонтировать файл от блочного устройства, получаем список всех файлов, подключенных таким образом:
losetup -a
/dev/loop0: [0902]:4358159 (/root/partition.img)
Отключаем:
losetup -d /dev/loop0
Хорошо всё понятно написано, спасибо!
ReplyDeleteВместо dd можно сделать так:
ReplyDeletetruncate -s 512M partition.img
Гораздо быстрее получится.
Ок, а как сохранить это всё после перезагрузки? Дистр Debian
ReplyDelete/etc/fstab?
DeleteThis comment has been removed by the author.
Delete