Разреженный файл, занимающий все пространство Fallocate() D сразу

Я пытаюсь создать разреженный файл (для образа жесткого диска QEMU).

И то и другое qemu-img а также fallocate сбивают с толку.

$ fallocate -l 100M disk.img

$ ls -lsh disk.img
101M -rw-r--r-- 1 i336 users 100M Jul 22 12:03 disk.img

Обратите внимание 101M, strace показывает успешный системный вызов:

$ strace fallocate -l 100M disk.img
open("disk.img", O_RDWR|O_CREAT|O_LARGEFILE, 0666) = 3
fallocate(3, 0, 0, 104857600)           = 0

$ ls -lsh disk.img
101M -rw-r--r-- 1 i336 users 100M Jul 22 12:03 disk.img

Я не уверен, если stat это правильный инструмент, но на всякий случай..

$ stat disk.img
  File: 'disk.img'
  Size: 104857600       Blocks: 204808     IO Block: 4096   regular file
Device: 802h/2050d      Inode: 549166      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1337/    i336)   Gid: (  100/   users)

Возможная (очень странная) подсказка: 104857600/204808 = 511.9800, (Размер файла / количество блоков)

qemu-img имеет аналогичный выход. (Я нашел preallocation вариант в мануале.)

$ qemu-img create -f raw -o preallocation=falloc disk.img 100M
Formatting 'disk.img', fmt=raw size=104857600 preallocation=falloc

$ ls -lsh disk.img
101M -rw-r--r-- 1 i336 users 100M Jul 22 12:06 disk.img

Вот что раздражает: изображение, похоже, использует реальное пространство на диске.

$ df -h /; fallocate -l 1G disk.img; df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        48G   43G  3.5G  93% /
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        48G   44G  2.5G  95% /

И все же, как и разреженный файл, его создание не занимает много времени!

$ time fallocate -l 3.3G disk.img
0.00user 0.57system 0:00.91elapsed 63%CPU (0avgtext+0avgdata 5424maxresident)k
200inputs+0outputs (0major+68minor)pagefaults 0swaps

0,91 секунды на жестком диске 5400 об / мин. Нет никакого способа, которым я не создаю разреженный файл.

И все же, независимо от того, какой инструмент я использую, кажется, что он использует 101 МБ свободного места.

Что я могу делать не так или неправильно настроен?

$ cat /etc/fstab
/dev/sda2 / ext4 rw,user_xattr 0 0

0 ответов

Другие вопросы по тегам