From 3b7e017ea8ae35cce79285461c2ef64320881098 Mon Sep 17 00:00:00 2001 From: James Mark Chan Date: Tue, 18 Aug 2026 18:31:45 -0700 Subject: [PATCH 1/3] #205 get model for whole partition disk on linux --- jdm-core/src/main/java/jdiskmark/Util.java | 5 +++++ jdm-core/src/main/java/jdiskmark/UtilOs.java | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/jdm-core/src/main/java/jdiskmark/Util.java b/jdm-core/src/main/java/jdiskmark/Util.java index aa62c1f..dd4f55f 100644 --- a/jdm-core/src/main/java/jdiskmark/Util.java +++ b/jdm-core/src/main/java/jdiskmark/Util.java @@ -134,6 +134,11 @@ public static String getDriveModel(File dataDir) { } List deviceNames = UtilOs.getDeviceNamesFromPartitionLinux(partition); + // handle whole-disk filesystem (no partition table) — pkname is empty + if (deviceNames.isEmpty()) { + return UtilOs.getVendorModelLinux(partition); + } + // handle single physical drive if (deviceNames.size() == 1) { String devicePath = "/dev/" + deviceNames.getFirst(); diff --git a/jdm-core/src/main/java/jdiskmark/UtilOs.java b/jdm-core/src/main/java/jdiskmark/UtilOs.java index 59a4dce..3f025c7 100644 --- a/jdm-core/src/main/java/jdiskmark/UtilOs.java +++ b/jdm-core/src/main/java/jdiskmark/UtilOs.java @@ -380,7 +380,9 @@ static public List getDeviceNamesFromPartitionLinux(String partition) { if (App.verbose) { System.err.println("devName=" + line); } - deviceNames.add(line); + if (!line.trim().isEmpty()) { + deviceNames.add(line); + } } } catch (IOException e) { LOGGER.log(Level.SEVERE, null, e); From d16a20f2b6625b343a49dabe8bd129a53b2a1f61 Mon Sep 17 00:00:00 2001 From: James Mark Chan Date: Mon, 7 Sep 2026 17:30:44 -0700 Subject: [PATCH 2/3] #205 vendor model --- jdm-core/src/main/java/jdiskmark/Util.java | 3 ++- jdm-core/src/main/java/jdiskmark/UtilOs.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/jdm-core/src/main/java/jdiskmark/Util.java b/jdm-core/src/main/java/jdiskmark/Util.java index dd4f55f..34fcb34 100644 --- a/jdm-core/src/main/java/jdiskmark/Util.java +++ b/jdm-core/src/main/java/jdiskmark/Util.java @@ -136,7 +136,8 @@ public static String getDriveModel(File dataDir) { // handle whole-disk filesystem (no partition table) — pkname is empty if (deviceNames.isEmpty()) { - return UtilOs.getVendorModelLinux(partition); + String vendorModel = UtilOs.getVendorModelLinux(partition); + return vendorModel != null ? vendorModel : ERROR_DRIVE_INFO; } // handle single physical drive diff --git a/jdm-core/src/main/java/jdiskmark/UtilOs.java b/jdm-core/src/main/java/jdiskmark/UtilOs.java index 3f025c7..4de9c23 100644 --- a/jdm-core/src/main/java/jdiskmark/UtilOs.java +++ b/jdm-core/src/main/java/jdiskmark/UtilOs.java @@ -381,7 +381,7 @@ static public List getDeviceNamesFromPartitionLinux(String partition) { System.err.println("devName=" + line); } if (!line.trim().isEmpty()) { - deviceNames.add(line); + deviceNames.add(line.trim()); } } } catch (IOException e) { From a706a3c2e552dfc384439c46708688de47c67ca4 Mon Sep 17 00:00:00 2001 From: James Mark Chan Date: Mon, 7 Sep 2026 17:48:01 -0700 Subject: [PATCH 3/3] #205 error handling --- jdm-core/src/main/java/jdiskmark/UtilOs.java | 24 +++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/jdm-core/src/main/java/jdiskmark/UtilOs.java b/jdm-core/src/main/java/jdiskmark/UtilOs.java index 6d6a729..043da5b 100644 --- a/jdm-core/src/main/java/jdiskmark/UtilOs.java +++ b/jdm-core/src/main/java/jdiskmark/UtilOs.java @@ -415,21 +415,27 @@ static public String getPartitionFromFilePathLinux(Path path) { ProcessBuilder pb = new ProcessBuilder("df", "-k", path.toString()); Map env = pb.environment(); env.put("LC_ALL", "C"); // set language to english - pb.redirectErrorStream(true); Process process = pb.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; - String curPartition; + String curPartition = null; while ((line = reader.readLine()) != null) { if (App.verbose) { System.out.println("curLine=" + line); } if (line.contains("/dev/")) { curPartition = line.split(" ")[0]; - return curPartition; + break; } } - } catch (IOException e) { + int exitCode = process.waitFor(); + if (exitCode == 0 && curPartition != null) { + return curPartition; + } + } catch (IOException | InterruptedException e) { + if (e instanceof InterruptedException) { + Thread.currentThread().interrupt(); + } LOGGER.log(Level.SEVERE, null, e); } return null; @@ -450,7 +456,6 @@ static public List getDeviceNamesFromPartitionLinux(String partition) { ProcessBuilder pb = new ProcessBuilder("lsblk", "-no", "pkname", partition); Map env = pb.environment(); env.put("LC_ALL", "C"); // set language to english - pb.redirectErrorStream(true); Process process = pb.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); // detect multiple lines and if so indicate it is an LVM @@ -463,7 +468,14 @@ static public List getDeviceNamesFromPartitionLinux(String partition) { deviceNames.add(line.trim()); } } - } catch (IOException e) { + int exitCode = process.waitFor(); + if (exitCode != 0) { + deviceNames.clear(); + } + } catch (IOException | InterruptedException e) { + if (e instanceof InterruptedException) { + Thread.currentThread().interrupt(); + } LOGGER.log(Level.SEVERE, null, e); } return deviceNames;