fix(smart v0.1.11): utiliser /dev/nvme0n1 au lieu de /dev/nvme0

/dev/nvme0  (contrôleur char device) : crw------- root root → root only
/dev/nvme0n1 (namespace block device): brw-rw---- root disk → groupe disk OK

L'agent tourne avec DynamicUser+SupplementaryGroups=disk → a accès au
block device nvme0n1 mais pas au char device nvme0. Les 3 versions
précédentes (v0.1.8-v0.1.10) tentaient toutes d'ouvrir le contrôleur.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Gilles Soulier
2026-05-23 07:58:20 +02:00
parent dc60fe2a8d
commit 1250cd7d3c
4 changed files with 6 additions and 11 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "nanometrics-agent" name = "nanometrics-agent"
version = "0.1.10" version = "0.1.11"
edition = "2021" edition = "2021"
[lib] [lib]
+5 -10
View File
@@ -91,17 +91,12 @@ pub fn collect() -> Option<Vec<crate::payload::SmartMetrics>> {
.map(|e| e.file_name().into_string().unwrap_or_default()) .map(|e| e.file_name().into_string().unwrap_or_default())
.filter_map(|n| { .filter_map(|n| {
if n.starts_with("sd") { if n.starts_with("sd") {
// /dev/sda, /dev/sdb — block device, groupe disk OK
Some(format!("/dev/{}", n))
} else if n.starts_with("nvme") && n.contains('n') {
// /dev/nvme0n1 — block device (brw-rw---- root disk), groupe disk OK
// NE PAS utiliser /dev/nvme0 (contrôleur crw------- root root, root only)
Some(format!("/dev/{}", n)) Some(format!("/dev/{}", n))
} else if n.starts_with("nvme") {
// /sys/block a nvme0n1 (namespace) → extraire le contrôleur nvme0
// rfind('n') trouve le dernier 'n' séparateur namespace, ex: nvme0[n]1
let ctrl = if let Some(pos) = n.rfind('n')
.filter(|&p| p >= 5 && n[p+1..].chars().all(|c| c.is_ascii_digit())) {
&n[..pos]
} else {
&n // déjà un nom de contrôleur (rare)
};
Some(format!("/dev/{}", ctrl))
} else { } else {
None None
} }
Binary file not shown.
Binary file not shown.