Package: e2fsprogs
Version: 1.44.1-2

Trying to mkfs.ext4 from initramfs (so with klibc) inside QEMU, it gets stuck on getrandom syscall. Running it with strace:

uname({sysname="Linux", nodename="(none)", ...}) = 0
access("/sys/fs/ext4/features/lazy_itable_init", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/dev/sda", O_RDONLY|O_EXCL) = 3
getuid()                                = 0
geteuid()                               = 0
getgid()                                = 0
getegid()                               = 0
prctl(PR_GET_DUMPABLE)                  = 1 (SUID_DUMP_USER)
fstat(3, {st_mode=S_IFBLK|0600, st_rdev=makedev(8, 0), ...}) = 0
ioctl(3, BLKDISCARDZEROES, [0])         = 0
pread64(3, "\0\0\10\0\0\0 \0\231\231\1\0q\33\37\0\365\377\7\0\0\0\0\0\2\0\0\0\2\0\0\0"..., 1024, 1024) = 1024
close(3)                                = 0
access("/var/lib/e2fsprogs", W_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/dev/sda", O_RDWR|O_EXCL) = 3
getuid()                                = 0
geteuid()                               = 0
getgid()                                = 0
getegid()                               = 0
prctl(PR_GET_DUMPABLE)                  = 1 (SUID_DUMP_USER)
fstat(3, {st_mode=S_IFBLK|0600, st_rdev=makedev(8, 0), ...}) = 0
ioctl(3, BLKDISCARDZEROES, [0])         = 0
ioctl(3, BLKROGET, [0])                 = 0
uname({sysname="Linux", nodename="(none)", ...}) = 0
ioctl(3, BLKDISCARD, [0, 16777216])     = 0
write(1, "Discarding device blocks: ", 26Discarding device blocks: ) = 26
write(1, "   4096/2097152", 15   4096/2097152)         = 15
write(1, "\10\10\10\10\10\10\10\10\10\10\10\1) = 150\10", 15
ioctl(3, BLKDISCARD, [16777216, 2147483648]) = 0
ioctl(3, BLKDISCARD, [2164260864, 2147483648]) = 0
ioctl(3, BLKDISCARD, [4311744512, 2147483648]) = 0
ioctl(3, BLKDISCARD, [6459228160, 2130706432]) = 0
write(1, "               ", 15               )         = 15
write(1, "\10\10\10\10\10\10\10\10\10\10\10\1) = 150\10", 15
write(1, "done                            "..., 33done
) = 33
pwrite64(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 3072, 1024) = 3072
access("/dev/random", R_OK)             = 0
getrandom(

I wasn't experiencing such a behavior one month before, but I don't know what caused it: kernel update from 4.15 to 4.16 or e2fsprogs update.

Workaround is to run mke2fs with explicitly specified uuid and hash seed:

mkfs.ext4 -U 08365ab2-bf18-43eb-9035-ce947f4a7565 -E hash_seed=08365a
b2-bf18-43eb-9035-ce947f4a7565 /dev/sda

I don't think mke2fs should do blocking random calls. /dev/urandom is present and works fine (I checked it).

Reply via email to