From 81c22713113765abf0123cbd139e1e5c5d1d0ac2 Mon Sep 17 00:00:00 2001 From: Mike Fleetwood Date: Wed, 13 Mar 2024 21:36:14 +0000 Subject: [PATCH] Recognise NBDs (Network Block Devices) (#247) Network Block Devices are not displayed in GParted as partitionable devices. They do appear in /proc/partitions, are reported by fdisk -l [1] and by ped_device_probe_all() from libparted. Therefore include them. Create NBD device for testing: # truncate -s 1G /tmp/disk-1G.img # nbd-server -C /dev/null 9000 /tmp/disk-1G.img # nbd-client localhost 9000 /dev/nbd0 After creating a couple of partitions for testing, the contents of /proc/partitions looks like this: # egrep 'name|nbd' /proc/partitions major minor #blocks name 43 0 1048576 nbd0 43 1 262144 nbd0p1 43 2 785408 nbd0p2 Listing all disks using fdisk: # fdisk -l ... Disk /dev/nbd0: 1 GiB, 1073741824 bytes, 2097152 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x081b1cd1 Device Boot Start End Sectors Size Id Type /dev/nbd0p1 2048 526335 524288 256M 83 Linux /dev/nbd0p2 526336 2097151 1570816 767M 83 Linux Temporarily apply this patch to GParted so that it ignores the devices it currently selects from /proc/partitions to use what get_device_probe_all() reports. GParted shows NBDs. $ git diff --unified=1 diff --git a/src/GParted_Core.cc b/src/GParted_Core.cc index 1629f94f..abea7a0b 100644 --- a/src/GParted_Core.cc +++ b/src/GParted_Core.cc @@ -172,3 +172,3 @@ void GParted_Core::set_devices_thread( std::vector * pdevices ) //try to find all available devices if devices exist in /proc/partitions - std::vector temp_devices = Proc_Partitions_Info::get_device_paths(); + std::vector temp_devices; if ( ! temp_devices .empty() ) Tidy-up NBD device: # nbd-client -d /dev/ndb0 # killall nbd-server # rm /tmp/disk-1G.img [1] man fdisk "-l, --list List the partition tables for the specified devices and then exit. If no devices are given, the devices mentioned in /proc/partitions (if this file exists) are used. " Closes #247 - GParted does not list NBD (Network Block Device) devices in the GUI --- src/Proc_Partitions_Info.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Proc_Partitions_Info.cc b/src/Proc_Partitions_Info.cc index 74793c8c..a89a356a 100644 --- a/src/Proc_Partitions_Info.cc +++ b/src/Proc_Partitions_Info.cc @@ -160,6 +160,11 @@ bool Proc_Partitions_Info::is_whole_disk_device_name(const Glib::ustring& name) if (Utils::regexp_label(name, "^(bcache[0-9]+)$") != "") return true; + // Match Network Block Device names. + // E.g.: device = nbd0 (partition = nbd0p1) + if (Utils::regexp_label(name, "^(nbd[0-9]+)$") != "") + return true; + return false; }