[PATCH v2] erofs-utils: dump: add support for `--blkid-udev`

Gao Xiang hsiangkao at linux.alibaba.com
Fri Oct 10 04:53:39 AEDT 2025


For example, it can be used to disable udev's parsing of metadata and
the creation of persistent symlinks for that device [1], to avoid
unnecessary network access that can take some time.

```sh
cat << EOF > /etc/udev/rules.d/59-skip-nbd-erofs-persistent-storage.rules

IMPORT{db}="UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG"
IMPORT{program}="/usr/local/bin/dump.erofs --blkid-udev %N"

ACTION=="add|change", SUBSYSTEM=="block", KERNEL=="nbd*", ENV{ID_FS_TYPE}=="erofs", ENV{UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG}="1"
EOF
```

[1] https://github.com/systemd/systemd/pull/3714
Cc: Chengyu Zhu <hudsonzhu at tencent.com>
Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
---
 dump/main.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/dump/main.c b/dump/main.c
index f685799..4ad3f7b 100644
--- a/dump/main.c
+++ b/dump/main.c
@@ -26,6 +26,7 @@ struct erofsdump_cfg {
 	bool show_statistics;
 	bool show_subdirectories;
 	bool show_file_content;
+	bool show_blkid_udev;
 	erofs_nid_t nid;
 	const char *inode_path;
 };
@@ -81,6 +82,7 @@ static struct option long_options[] = {
 	{"ls", no_argument, NULL, 5},
 	{"offset", required_argument, NULL, 6},
 	{"cat", no_argument, NULL, 7},
+	{"blkid-udev", no_argument, NULL, 512},
 	{0, 0, 0, 0},
 };
 
@@ -125,6 +127,7 @@ static void usage(int argc, char **argv)
 		" -S              show statistic information of the image\n"
 		" -e              show extent info (INODE required)\n"
 		" -s              show information about superblock\n"
+		" --blkid-udev    print block device attributes for easy import into the udev environment\n"
 		" --device=X      specify an extra device to be used together\n"
 		" --ls            show directory contents (INODE required)\n"
 		" --cat           show file contents (INODE required)\n"
@@ -198,6 +201,9 @@ static int erofsdump_parse_options_cfg(int argc, char **argv)
 		case 7:
 			dumpcfg.show_file_content = true;
 			break;
+		case 512:
+			dumpcfg.show_blkid_udev = true;
+			break;
 		default:
 			return -EINVAL;
 		}
@@ -765,6 +771,9 @@ int main(int argc, char **argv)
 		goto exit;
 	}
 
+	if (dumpcfg.show_blkid_udev)
+		cfg.c_dbg_lvl = -1;
+
 	err = erofs_dev_open(&g_sbi, cfg.c_img_path, O_RDONLY | O_TRUNC);
 	if (err) {
 		erofs_err("failed to open image file");
@@ -777,6 +786,15 @@ int main(int argc, char **argv)
 		goto exit_dev_close;
 	}
 
+	if (dumpcfg.show_blkid_udev) {
+		char uuid_str[37];
+
+		erofs_uuid_unparse_lower(g_sbi.uuid, uuid_str);
+		printf("ID_FS_UUID=%s\nID_FS_UUID_ENC=%s\nID_FS_TYPE=erofs\nID_FS_USAGE=filesystem\n",
+		       uuid_str, uuid_str);
+		goto exit_put_super;
+	}
+
 	if (dumpcfg.show_file_content) {
 		if (dumpcfg.show_superblock || dumpcfg.show_statistics || dumpcfg.show_subdirectories) {
 			fprintf(stderr, "The '--cat' flag is incompatible with '-S', '-e', '-s' and '--ls'.\n");
-- 
2.43.5



More information about the Linux-erofs mailing list