_populate_xfs_qmount_option
_scratch_mount
+
+ # We cannot directly force the filesystem to create the metadata
+ # structures we want; we can only achieve this indirectly by carefully
+ # crafting files and a directory tree. Therefore, we must have exact
+ # control over the layout and device selection of all files created.
+ # Clear the rtinherit flag on the root directory so that files are
+ # always created on the data volume regardless of MKFS_OPTIONS. We can
+ # set the realtime flag when needed.
+ $XFS_IO_PROG -c 'chattr -t' $SCRATCH_MNT
+
blksz="$(stat -f -c '%s' "${SCRATCH_MNT}")"
dblksz="$($XFS_INFO_PROG "${SCRATCH_MNT}" | grep naming.*bsize | sed -e 's/^.*bsize=//g' -e 's/\([0-9]*\).*$/\1/g')"
crc="$($XFS_INFO_PROG "${SCRATCH_MNT}" | grep crc= | sed -e 's/^.*crc=//g' -e 's/\([0-9]*\).*$/\1/g')"
# Char & block
echo "+ special"
mknod "${SCRATCH_MNT}/S_IFCHR" c 1 1
- mknod "${SCRATCH_MNT}/S_IFBLK" c 1 1
+ mknod "${SCRATCH_MNT}/S_IFBLK" b 1 1
# special file with an xattr
setfacl -P -m u:nobody:r ${SCRATCH_MNT}/S_IFCHR
if [ $is_rmapbt -gt 0 ] && [ $is_rt -gt 0 ]; then
echo "+ rtrmapbt btree"
nr="$((blksz * 2 / 32))"
+ $XFS_IO_PROG -R -f -c 'truncate 0' "${SCRATCH_MNT}/RTRMAPBT"
__populate_create_file $((blksz * nr)) "${SCRATCH_MNT}/RTRMAPBT"
fi
# Char & block
echo "+ special"
mknod "${SCRATCH_MNT}/S_IFCHR" c 1 1
- mknod "${SCRATCH_MNT}/S_IFBLK" c 1 1
+ mknod "${SCRATCH_MNT}/S_IFBLK" b 1 1
# special file with an xattr
setfacl -P -m u:nobody:r ${SCRATCH_MNT}/S_IFCHR
fi
if [ -f $dir/$file_count ]; then
- bytes_written=$(stat -c '%s' $dir/$file_count)
+ bytes_written=$(_get_filesize $dir/$file_count)
fi
# If there was no room to make the file, then divide it in
_scratch_populate_restore_cached() {
local metadump="$1"
+ # If we're configured for compressed dumps and there isn't already an
+ # uncompressed dump, see if we can use DUMP_COMPRESSOR to decompress
+ # something.
+ if [ -n "$DUMP_COMPRESSOR" ]; then
+ for compr in "$metadump".*; do
+ [ -e "$compr" ] && $DUMP_COMPRESSOR -d -f -k "$compr" && break
+ done
+ fi
+
+ test -r "$metadump" || return 1
+
case "${FSTYP}" in
"xfs")
xfs_mdrestore "${metadump}" "${SCRATCH_DEV}" && return 0
rm -rf "${POPULATE_METADUMP}"
# Try to restore from the metadump
- test -r "${POPULATE_METADUMP}" && \
- _scratch_populate_restore_cached "${POPULATE_METADUMP}" && \
+ _scratch_populate_restore_cached "${POPULATE_METADUMP}" && \
return
# Oh well, just create one from scratch
"xfs")
_scratch_xfs_populate $@
_scratch_xfs_populate_check
- _scratch_metadump "${POPULATE_METADUMP}" -a -o
+ _scratch_xfs_metadump "${POPULATE_METADUMP}"
+
+ local logdev=
+ [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
+ logdev=$SCRATCH_LOGDEV
+
+ _xfs_metadump "$POPULATE_METADUMP" "$SCRATCH_DEV" "$logdev" \
+ compress
;;
"ext2"|"ext3"|"ext4")
_scratch_ext4_populate $@
_scratch_ext4_populate_check
- e2image -Q "${SCRATCH_DEV}" "${POPULATE_METADUMP}"
+ _ext4_metadump "${SCRATCH_DEV}" "${POPULATE_METADUMP}" compress
;;
*)
_fail "Don't know how to populate a ${FSTYP} filesystem."