I was just looking at a posting on stackexchange related to mke2fs and filesystem image fragmentation: https://unix.stackexchange.com/questions/287133/why-is-fragmentation-level-so-huge-in-files-that-contain-other-filesystems It seems like "mke2fs" is causing issues for creation of filesystems in preallocated files, as it is discarding the previously-allocated blocks, even if the "-E nodiscard" option is used. # dd if=/dev/zero of=/var/tmp/tt bs=1M count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 0.272006 s, 385 MB/s # sync # filefrag -v /var/tmp/tt Filesystem type is: ef53 File size of /var/tmp/tt is 104857600 (25600 blocks of 4096 bytes) ext: logical_offset: physical_offset: length: expected: flags: 0: 0.. 24575: 1261568.. 1286143: 24576: 1: 24576.. 25599: 1292288.. 1293311: 1024: 1286144: last,eof /var/tmp/tt: 2 extents found # ./misc/mke2fs -E nodiscard /var/tmp/tt mke2fs 1.43-WIP (15-Mar-2016) Creating filesystem with 102400 1k blocks and 25688 inodes Filesystem UUID: 3f8a0ca8-70b8-4801-b834-99dff0a6a642 Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729 Allocating group tables: done Writing inode tables: done Writing superblocks and filesystem accounting information: done [root@mookie e2fsprogs-git]# filefrag -v /var/tmp/tt Filesystem type is: ef53 File size of /var/tmp/tt is 104857600 (25600 blocks of 4096 bytes) ext: logical_offset: physical_offset: length: expected: flags: 0: 0.. 65: 1261568.. 1261633: 66: 1: 127.. 2113: 1261695.. 1263681: 1987: 1261634: 2: 2175.. 4096: 1263743.. 1265664: 1922: 1263682: 3: 4158.. 6209: 1265726.. 1267777: 2052: 1265665: 4: 6271.. 8192: 1267839.. 1269760: 1922: 1267778: 5: 8254.. 10305: 1269822.. 1271873: 2052: 1269761: 6: 10367.. 12288: 1271935.. 1273856: 1922: 1271874: 7: 12350.. 14401: 1273918.. 1275969: 2052: 1273857: 8: 14463.. 16384: 1276031.. 1277952: 1922: 1275970: 9: 16446.. 18497: 1278014.. 1280065: 2052: 1277953: 10: 18559.. 20480: 1280127.. 1282048: 1922: 1280066: 11: 20542.. 22528: 1282110.. 1284096: 1987: 1282049: 12: 22590.. 24575: 1284158.. 1286143: 1986: 1284097: 13: 24576.. 24576: 1292288.. 1292288: 1: 1286144: 14: 24638.. 25583: 1292350.. 1293295: 946: 1292289: last /var/tmp/tt: 15 extents found Without "-E nodiscard", mke2fs prints the message "Discarding device blocks: done" and calls fallocate() (from strace): fallocate(3, 03, 0, 1048576) = 0 fallocate(3, 03, 1048576, 103809024) = 0 which is NOT called in the "-E nodiscard" case, but it somehow is discarding the allocated blocks anyway during inode table allocation: write(1, "Writing inode tables: ", 22) = 22 write(1, " 0/13", 5) = 5 write(1, "\10\10\10\10\10", 5) = 5 fstat(3, {st_mode=S_IFREG|0644, st_size=104857600, ...}) = 0 fallocate(3, 03, 267264, 252928) = 0 fstat(3, {st_mode=S_IFREG|0644, st_size=104857600, ...}) = 0 fallocate(3, 03, 8655872, 252928) = 0 fstat(3, {st_mode=S_IFREG|0644, st_size=104857600, ...}) = 0 fallocate(3, 03, 16780288, 252928) = 0 : : Cheers, Andreas
Attachment:
signature.asc
Description: Message signed with OpenPGP