Титла: ZFS - имам "free" пространство, което не е "available"?
Публикувано от: vstoykov в Jul 19, 2017, 01:53
valentin@computer:~/zfs-lab$ sudo zfs list flashbox1/data NAME USED AVAIL REFER MOUNTPOINT flashbox1/data 31.4M 518K 31.4M /mnt/flashbox1/data valentin@computer:~/zfs-lab$ sudo zpool list flashbox1 NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT flashbox1 64M 31.5M 32.5M - 27% 49% 1.00x ONLINE - valentin@computer:~/zfs-lab$ Как така имам "достъпни" 518K, а имам "свободни" 32,5M? Създадох ZFS контейнера така: $ dd if=/dev/zero of=zbox1.1.img bs=80M count=1 $ dd if=/dev/zero of=zbox1.2.img bs=80M count=1 $ dd if=/dev/zero of=zbox1.3.img bs=80M count=1 $ sudo zpool create -m /mnt/flashbox1 flashbox1 mirror /home/valentin/zfs-lab/zbox1.1.img /home/valentin/zfs-lab/zbox1.2.img /home/valentin/zfs-lab/zbox1.3.img sudo zfs create -o relatime=on -o compression=lz4 -o mountpoint=/mnt/flashbox1/data flashbox1/data
Проверих файловете - има много нули (не съм ги броил, вероятно са повече от половината байтове). И се компресират добре (при положение, че контейнерът е пълен с компресирани файлове!): $ 7z a test.7z zbox1.1.img $ ls test.7z zbox1.1.img -lah -rw-rw-r-- 1 valentin valentin 33M Jul 19 01:15 test.7z -rw-rw-r-- 1 valentin valentin 80M Jul 19 00:40 zbox1.1.img
Настройките са: $ sudo zfs get all flashbox1 NAME PROPERTY VALUE SOURCE flashbox1 type filesystem - flashbox1 creation Wed Jul 19 0:22 2017 - flashbox1 used 31.5M - flashbox1 available 518K - flashbox1 referenced 19K - flashbox1 compressratio 1.00x - flashbox1 mounted yes - flashbox1 quota none default flashbox1 reservation none default flashbox1 recordsize 128K default flashbox1 mountpoint /mnt/flashbox1 local flashbox1 sharenfs off default flashbox1 checksum on default flashbox1 compression off default flashbox1 atime on default flashbox1 devices on default flashbox1 exec on default flashbox1 setuid on default flashbox1 readonly off default flashbox1 zoned off default flashbox1 snapdir hidden default flashbox1 aclinherit restricted default flashbox1 canmount on default flashbox1 xattr on default flashbox1 copies 1 default flashbox1 version 5 - flashbox1 utf8only off - flashbox1 normalization none - flashbox1 casesensitivity sensitive - flashbox1 vscan off default flashbox1 nbmand off default flashbox1 sharesmb off default flashbox1 refquota none default flashbox1 refreservation none default flashbox1 primarycache all default flashbox1 secondarycache all default flashbox1 usedbysnapshots 0 - flashbox1 usedbydataset 19K - flashbox1 usedbychildren 31.5M - flashbox1 usedbyrefreservation 0 - flashbox1 logbias latency default flashbox1 dedup off default flashbox1 mlslabel none default flashbox1 sync standard default flashbox1 refcompressratio 1.00x - flashbox1 written 19K - flashbox1 logicalused 31.7M - flashbox1 logicalreferenced 9.50K - flashbox1 filesystem_limit none default flashbox1 snapshot_limit none default flashbox1 filesystem_count none default flashbox1 snapshot_count none default flashbox1 snapdev hidden default flashbox1 acltype off default flashbox1 context none default flashbox1 fscontext none default flashbox1 defcontext none default flashbox1 rootcontext none default flashbox1 relatime off default flashbox1 redundant_metadata all default flashbox1 overlay off default Идеята ми е да ползвам флашки и компактдискове за архиви. Флашките са извести с това, че понякога губят информация (data rot), ако са оставени седмици или повече без захранване (имал съм такъв случай). До сега си записвах архивните файлове по няколко пъти (това ми е навик от времето когато ползвах дискети) и им слагам контролни суми, които проверявам. Обаче сега искам по-модерно решение - ZFS е такова. Само че не мога да разбера как да накарам ZFS контейнера да ми разреши да ползвам цялото свободно място. Това с трите файла 80M е практично в случай, че се ползва флашка, форматирана под FAT32 и се ползва и за други неща (между другото слагам и тези архиви). Идеята ми е да направя файлове с размера на оптичен диск и директно да ги записвам на диска - без ISO 9660 (файловата система, която се ползва за оптични дискове). Това с 80-те мегабайтовите файлове е за proof of concept и за архивиране на дребни неща на флашки. Би било обаче доста неефективно ако не успея да направя така, че да не се губи половината пространство. Нямам snapshots: $ sudo zfs list -o space -r flashbox1 NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD flashbox1 502K 31.5M 0 19K 0 31.5M flashbox1/data 502K 31.4M 0 31.4M 0 0
Това нещо "USEDDS" не съм сигурен какво е.
Титла: Re: ZFS - имам "free" пространство, което не е "available"?
Публикувано от: growchie в Jul 19, 2017, 09:18
Я дай аутпута на zpool status.
Титла: Re: ZFS - имам "free" пространство, което не е "available"?
Публикувано от: vstoykov в Jul 19, 2017, 23:16
valentin@computer:~/zfs-lab$ sudo zpool status flashbox1 pool: flashbox1 state: ONLINE scan: scrub repaired 0 in 0h0m with 0 errors on Wed Jul 19 02:16:18 2017 config:
NAME STATE READ WRITE CKSUM flashbox1 ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 /home/valentin/zfs-lab/zbox1.1.img ONLINE 0 0 0 /home/valentin/zfs-lab/zbox1.2.img ONLINE 0 0 0 /home/valentin/zfs-lab/zbox1.3.img ONLINE 0 0 0
errors: No known data errors valentin@computer:~/zfs-lab$ sudo zpool list flashbox1 NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT flashbox1 64M 31.5M 32.5M - 28% 49% 1.00x ONLINE - valentin@computer:~/zfs-lab$ sudo zfs list flashbox1 NAME USED AVAIL REFER MOUNTPOINT flashbox1 31.5M 500K 19K /mnt/flashbox1 valentin@computer:~/zfs-lab$ sudo zfs list flashbox1/data NAME USED AVAIL REFER MOUNTPOINT flashbox1/data 31.4M 500K 31.4M /mnt/flashbox1/data valentin@computer:~/zfs-lab$
Гледах файловете през ghex и видях големи полета от нули. Може би пази някакъв резерв за нещо си (може би за snapshots?). Изключих snapshots и няма ефект: $ sudo zfs set snapshot_limit=0 flashbox1
Титла: Re: ZFS - имам "free" пространство, което не е "available"?
Публикувано от: pgmgm в Jul 20, 2017, 09:17
Принципно нали всяка файлова система си резервира част от "диска", за нейни си нужди? Като гледам - ext4 си дърпа 2%, при ZFS предполагам е повече? http://docs.oracle.com/cd/E19253-01/819-5461/gbdbb/index.html http://www.tech-recipes.com/rx/1414/zfs-reserve-space-for-filesystem/ cloud ~ # dd if=/dev/zero of=test1 bs=1024 count=100000 100000+0 records in 100000+0 records out 102400000 bytes (102 MB) copied, 0.778352 s, 132 MB/s cloud ~ # mkfs -t ext4 test1 mke2fs 1.42.9 (28-Dec-2013) test1 is not a block special device. Proceed anyway? (y,n) y Discarding device blocks: done Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 25064 inodes, 100000 blocks 5000 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=33685504 13 block groups 8192 blocks per group, 8192 fragments per group 1928 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729
Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done
cloud ~ # mkdir /mnt/test cloud ~ # mount -t ext4 -o loop test1 /mnt/test cloud ~ # df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos_cloud-root 38G 5.8G 32G 16% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 193M 1.7G 11% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/ubg-data 788G 48G 700G 7% /data /dev/mapper/centos_cloud-home 19G 1.2G 18G 7% /home /dev/sda1 497M 236M 262M 48% /boot tmpfs 380M 0 380M 0% /run/user/0 /dev/loop0 91M 1.6M 83M 2% /mnt/test tmpfs 380M 0 380M 0% /run/user/1004
Титла: Re: ZFS - имам "free" пространство, което не е "available"?
Публикувано от: d0ni в Jul 20, 2017, 18:21
Явно ZFS си яде 32MB, независимо от големинта на pool-а. Пробвай да направиш дял от 512MB и пак ще имаш липсващи 30тина мегабайта. Тук има инфо за физическия layout на ZFS vdevs - http://www.osdevcon.org/2009/slides/zfs_internals_uli_graef.pdf. Пише че има 4 label-а по 256KB и някаква дупка от 3.5MB, но останалите 20+MB не е ясно къде отиват. Ако много те интересува може да си поиграеш със zdb.
Титла: Re: ZFS - имам "free" пространство, което не е "available"?
Публикувано от: vstoykov в Jul 21, 2017, 03:30
При размер на pool-а 3 DVD-та (DVD+R) се получава това: valentin@computer:/mnt/dvdbox1$ df -h . Filesystem Size Used Avail Use% Mounted on dvdbox1 13G 13G 768K 100% /mnt/dvdbox1 valentin@computer:/mnt/dvdbox1$ sudo zfs list dvdbox1 NAME USED AVAIL REFER MOUNTPOINT dvdbox1 12.6G 881K 12.6G /mnt/dvdbox1 valentin@computer:/mnt/dvdbox1$ sudo zpool list dvdbox1 NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT dvdbox1 13.0G 12.6G 417M - 61% 96% 1.00x ONLINE - valentin@computer:/mnt/dvdbox1$ sudo zpool status dvdbox1 pool: dvdbox1 state: ONLINE scan: none requested config:
NAME STATE READ WRITE CKSUM dvdbox1 ONLINE 0 0 0 /home/valentin2/zfs-lab-dvd/dvd1.1.bin ONLINE 0 0 0 /home/valentin2/zfs-lab-dvd/dvd2.1.bin ONLINE 0 0 0 /home/valentin2/zfs-lab-dvd/dvd3.1.bin ONLINE 0 0 0
errors: No known data errors valentin@computer:/mnt/dvdbox1$ ls /home/valentin2/zfs-lab-dvd/* -la -rw-rw-r-- 1 valentin valentin 4700372992 Jul 21 03:21 /home/valentin2/zfs-lab-dvd/dvd1.1.bin -rw-rw-r-- 1 valentin valentin 4700372992 Jul 21 03:21 /home/valentin2/zfs-lab-dvd/dvd2.1.bin -rw-rw-r-- 1 valentin valentin 4700372992 Jul 21 03:21 /home/valentin2/zfs-lab-dvd/dvd3.1.bin valentin@computer:/mnt/dvdbox1$ ls /home/valentin2/zfs-lab-dvd/* -lah -rw-rw-r-- 1 valentin valentin 4.4G Jul 21 03:21 /home/valentin2/zfs-lab-dvd/dvd1.1.bin -rw-rw-r-- 1 valentin valentin 4.4G Jul 21 03:21 /home/valentin2/zfs-lab-dvd/dvd2.1.bin -rw-rw-r-- 1 valentin valentin 4.4G Jul 21 03:21 /home/valentin2/zfs-lab-dvd/dvd3.1.bin valentin@computer:/mnt/dvdbox1$ du -s . 13232832 . valentin@computer:/mnt/dvdbox1$ du -hs . 13G . valentin@computer:/mnt/dvdbox1$
Този път има един близо половин гигабайт разлика. Ако правилно съм го сметнал (du дава килобайти) има 525 мегабайта разлика: valentin@computer:~$ calc "(4700372992 * 3 ) - (13232832 * 1024 )" 550699008 valentin@computer:~$ calc "550699008 / 1024 / 1024" 525.1875 valentin@computer:~$
Или това са 3,9%. Но защо ми дава "FREE" 417M, а "AVAIL" е близо нула?
Титла: Re: ZFS - имам "free" пространство, което не е "available"?
Публикувано от: growchie в Jul 21, 2017, 09:44
Предполагам, че това са резервирани за метаданни. Дяловете са запълнени с данни, нали така?
Титла: Re: ZFS - имам "free" пространство, което не е "available"?
Публикувано от: vstoykov в Jul 21, 2017, 15:52
Pool-ът е пълен.
Обаче отворих файла с ghex и пак забелязах огромни полета с последователни нули.
Размерът на нулевите полета вероятно е по-малък от 163 MiB (на файл), защото толкова е разликата между размера на файла и мястото, което заема (записан е на компресирана файлова система, която компресира ефективно нулите, но не чак толкова ефективно компресира няколко дублиращи се файла във вложената ZFS - не е включена функцията за дедупликация).
Тоест нулите са около 3,65% или по-малко.
(Като се умножи 163 MiB по три се получава приблизително резултата от горните изчисления.)
Титла: Re: ZFS - имам "free" пространство, което не е "available"?
Публикувано от: growchie в Jul 25, 2017, 09:06
Мда. На този феномен се вика slop space allocation. Примерно за да може да се трият файлове дори когато фс-а е пълен му трябва празно пространство. Било 1/32 от размера на пула.
https://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSSpaceReportDifference
Виж и този инструмент http://wintelguy.com/zfs-calc.pl Може да ти е интересно.
|