]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
makefs: supress mkfs output, but print one line on success
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 9 Nov 2021 07:40:24 +0000 (08:40 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 12 Nov 2021 14:51:24 +0000 (15:51 +0100)
$ for i in ext2 ext3 ext4 btrfs xfs vfat swap minix; do
  echo $i && wipefs -q -a /var/tmp/test2_img && build/systemd-makefs $i /var/tmp/test2_img
done

ext2
/var/tmp/test2_img successfully formatted as ext2 (label "test2_img", uuid ad584a5b-037b-497a-825d-eaf2ba90da2d)
ext3
/var/tmp/test2_img successfully formatted as ext3 (label "test2_img", uuid 95239fff-55f4-44d5-bae0-11ef75d13166)
ext4
/var/tmp/test2_img successfully formatted as ext4 (label "test2_img", uuid 8c7ea699-05ab-4ce6-8df6-bc20d53dfd29)
btrfs
/var/tmp/test2_img successfully formatted as btrfs (label "test2_img", uuid 860bb061-4d92-4607-8821-a9d00216490e)
xfs
/var/tmp/test2_img successfully formatted as xfs (label "test2_img", uuid f32499ea-7311-47bb-be57-da62e51d33ae)
vfat
mkfs.fat 4.2 (2021-01-31)
/var/tmp/test2_img successfully formatted as vfat (label "TEST2_IMG", uuid d1e4ae63)
swap
mkswap: /var/tmp/test2_img: insecure permissions 0644, fix with: chmod 0600 /var/tmp/test2_img

mkswap: /var/tmp/test2_img contains holes or other unsupported extents.
        This swap file can be rejected by kernel on swap activation!
        Use --verbose for more details.

Setting up swapspace version 1, size = 256 MiB (268431360 bytes)
LABEL=test2_img, UUID=16bc3d8c-98d4-462b-8ff8-338467cde871
/var/tmp/test2_img successfully formatted as swap (no label or uuid specified)
minix
21856 inodes
65535 blocks
Firstdatazone=696 (696)
Zonesize=1024
Maxsize=268966912

/var/tmp/test2_img successfully formatted as minix (no label or uuid specified)

src/partition/makefs.c
src/shared/mkfs-util.c

index 7c94fbfedb109fc91f7712082b257ed3c27a684c..b6979b7e4f72824134a4541794c5bed83f77927f 100644 (file)
@@ -49,7 +49,7 @@ static int run(int argc, char *argv[]) {
                 if (lock_fd < 0)
                         return log_error_errno(lock_fd, "Failed to lock whole block device of \"%s\": %m", device);
         } else
-                log_info("%s is not a block device.", device);
+                log_debug("%s is not a block device, no need to lock.", device);
 
         r = probe_filesystem(device, &detected);
         if (r == -EUCLEAN)
index 1056de1bec200acb389a80b1d9879c604a17dafd..fbf04aa7ae7923b99893014622db0aee8f19bd6b 100644 (file)
@@ -39,6 +39,8 @@ int make_filesystem(
                 bool discard) {
 
         _cleanup_free_ char *mkfs = NULL;
+        char mangled_label[8 + 3 + 1],
+             vol_id[CONST_MAX(ID128_UUID_STRING_MAX, 8 + 1)] = {};
         int r;
 
         assert(node);
@@ -63,15 +65,35 @@ int make_filesystem(
                         return log_oom();
         }
 
+        if (streq(fstype, "vfat")) {
+                /* Classic FAT only allows 11 character uppercase labels */
+                strncpy(mangled_label, label, sizeof(mangled_label)-1);
+                mangled_label[sizeof(mangled_label)-1] = 0;
+                ascii_strupper(mangled_label);
+                label = mangled_label;
+
+                xsprintf(vol_id, "%08" PRIx32,
+                         ((uint32_t) uuid.bytes[0] << 24) |
+                         ((uint32_t) uuid.bytes[1] << 16) |
+                         ((uint32_t) uuid.bytes[2] << 8) |
+                         ((uint32_t) uuid.bytes[3])); /* Take first 32 bytes of UUID */
+        }
+
+        if (isempty(vol_id))
+                id128_to_uuid_string(uuid, vol_id);
+
         r = safe_fork("(mkfs)", FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_LOG|FORK_WAIT|FORK_STDOUT_TO_STDERR, NULL);
         if (r < 0)
                 return r;
         if (r == 0) {
                 /* Child */
+
+                /* When changing this conditional, also adjust the log statement below. */
                 if (streq(fstype, "ext2"))
                         (void) execlp(mkfs, mkfs,
+                                      "-q",
                                       "-L", label,
-                                      "-U", ID128_TO_UUID_STRING(uuid),
+                                      "-U", vol_id,
                                       "-I", "256",
                                       "-m", "0",
                                       "-E", discard ? "discard,lazy_itable_init=1" : "nodiscard,lazy_itable_init=1",
@@ -79,8 +101,9 @@ int make_filesystem(
 
                 else if (STR_IN_SET(fstype, "ext3", "ext4"))
                         (void) execlp(mkfs, mkfs,
+                                      "-q",
                                       "-L", label,
-                                      "-U", ID128_TO_UUID_STRING(uuid),
+                                      "-U", vol_id,
                                       "-I", "256",
                                       "-O", "has_journal",
                                       "-m", "0",
@@ -89,8 +112,9 @@ int make_filesystem(
 
                 else if (streq(fstype, "btrfs")) {
                         (void) execlp(mkfs, mkfs,
+                                      "-q",
                                       "-L", label,
-                                      "-U", ID128_TO_UUID_STRING(uuid),
+                                      "-U", vol_id,
                                       node,
                                       discard ? NULL : "--nodiscard",
                                       NULL);
@@ -98,9 +122,10 @@ int make_filesystem(
                 } else if (streq(fstype, "xfs")) {
                         const char *j;
 
-                        j = strjoina("uuid=", ID128_TO_UUID_STRING(uuid));
+                        j = strjoina("uuid=", vol_id);
 
                         (void) execlp(mkfs, mkfs,
+                                      "-q",
                                       "-L", label,
                                       "-m", j,
                                       "-m", "reflink=1",
@@ -108,34 +133,24 @@ int make_filesystem(
                                       discard ? NULL : "-K",
                                       NULL);
 
-                } else if (streq(fstype, "vfat")) {
-                        char mangled_label[8 + 3 + 1], vol_id[8 + 1];
-
-                        /* Classic FAT only allows 11 character uppercase labels */
-                        strncpy(mangled_label, label, sizeof(mangled_label)-1);
-                        mangled_label[sizeof(mangled_label)-1] = 0;
-                        ascii_strupper(mangled_label);
-
-                        xsprintf(vol_id, "%08" PRIx32,
-                                 ((uint32_t) uuid.bytes[0] << 24) |
-                                 ((uint32_t) uuid.bytes[1] << 16) |
-                                 ((uint32_t) uuid.bytes[2] << 8) |
-                                 ((uint32_t) uuid.bytes[3])); /* Take first 32 byte of UUID */
+                } else if (streq(fstype, "vfat"))
 
                         (void) execlp(mkfs, mkfs,
                                       "-i", vol_id,
-                                      "-n", mangled_label,
+                                      "-n", label,
                                       "-F", "32",  /* yes, we force FAT32 here */
                                       node, NULL);
 
-                } else if (streq(fstype, "swap")) {
+                else if (streq(fstype, "swap"))
+                        /* TODO: add --quiet here if
+                         * https://github.com/util-linux/util-linux/issues/1499 resolved. */
 
                         (void) execlp(mkfs, mkfs,
                                       "-L", label,
-                                      "-U", ID128_TO_UUID_STRING(uuid),
+                                      "-U", vol_id,
                                       node, NULL);
 
-                else
+                else
                         /* Generic fallback for all other file systems */
                         (void) execlp(mkfs, mkfs, node, NULL);
 
@@ -144,5 +159,12 @@ int make_filesystem(
                 _exit(EXIT_FAILURE);
         }
 
+        if (STR_IN_SET(fstype, "ext2", "ext3", "ext4", "btrfs", "xfs", "vfat", "swap"))
+                log_info("%s successfully formatted as %s (label \"%s\", uuid %s)",
+                         node, fstype, label, vol_id);
+        else
+                log_info("%s successfully formatted as %s (no label or uuid specified)",
+                         node, fstype);
+
         return 0;
 }