Proxmox GUI "Disks" Page Hangs with Communication Failure – SMART Query Issue?

w453y

New Member
Nov 15, 2024
8
3
3
21
India

Issue Summary

I recently encountered an issue where the Proxmox GUI would hang indefinitely when navigating to My Node > Disks, eventually displaying a "Communication Failure" error. However, the disk in question was fully recognized in the CLI (lsblk, fdisk), and I was even able to manually mount it. After debugging, I found that the issue was related to SMART data retrieval in Proxmox’s API. Disabling SMART queries resolved the problem, which suggests that smartctl (or another related command) was hanging during execution.

System Details:

  • Hardware: Dell laptop (Intel i7 8th Gen, 500GB HDD, 32GB RAM)
  • Proxmox Version: 8.3.2
  • Storage Setup:
  • Internal 500GB HDD (Proxmox installed)
  • 128GB USB drive (previously tested, no issues)
  • Newly added 250GB SSD connected via USB-to-SATA adapter (caused the issue)

Steps to Reproduce:

  1. Connect a 2.5" SSD via USB-to-SATA adapter to the Proxmox server.​
  2. Navigate to My Node > Disksin the GUI.​
  3. The page fails to load, eventually showing "Communication Failure."
  4. Running lsblk, fdisk, and mounting the disk manually all work fine, meaning the disk is recognized at the system level.​
  5. Checking logs (journalctl -xe, syslog, pvedaemon logs) did not provide any immediate clues.​

Debugging Process & Findings:

Based on a suggestion from a Reddit discussion, I investigated how Proxmox handles disk detection. Since the PVE API is primarily written in Perl, I checked the following files:
I identified that the function get_smart_data() was responsible for retrieving SMART attributes using smartctl. The relevant code inside /usr/share/perl5/PVE/Diskmanage.pm looked like this:
Perl:
if (!$nosmart) {
    eval {
        my $smartdata = get_smart_data($devpath, !is_ssdlike($type));
        $health = $smartdata->{health} if $smartdata->{health};

        if (is_ssdlike($type)) { # if we have an SSD, try to get the wearout indicator
            my $wear_level = get_wear_leveling_info($smartdata);
            $wearout = $wear_level if defined($wear_level);
        }
    };
}

Since get_smart_data() calls smartctl without any timeout handling, it appeared that the process was hanging indefinitely when querying my SSD over USB.

Workaround / Temporary Fix:

To test if SMART queries were the cause, I removed the SMART-related logic, leaving this instead:
Perl:
if (!$nosmart) {
}

After restarting pvedaemon with: systemctl restart pvedaemon

…the GUI immediately started working again, confirming that the issue was due to SMART queries failing or taking too long to respond.

Potential Root Cause & Bug Report Considerations

  • Proxmox uses run_command to execute system utilities like smartctl, but does not enforce any timeouts.
  • If smartctl hangs (especially with USB-connected drives), the entire API request stalls, causing the GUI to hang indefinitely.
  • This is likely a framework-wide issue, as any Proxmox API call relying on long-running system commands could exhibit the same behavior.
  • Implementing a timeout using Perl’s alarm]() function could prevent this from happening.

Next Steps & Questions for the Community

  1. Has anyone else encountered this issue with USB-attached SSDs?
  2. Is there a recommended way to disable SMART queries for specific devices without modifying core Proxmox files?
  3. Would implementing a timeout mechanism in Proxmox’s API be a viable long-term fix?
Bugzilla Report: https://bugzilla.proxmox.com/show_bug.cgi?id=6224
 
Last edited:
  • Like
Reactions: wassupluke
Hello w453y

I have the same "communication failure" problem on my PVE 8.3.4.
On my system I use a Fantec 8-way bay with
USB 3.2 Gen 2 (10G), USB-C connection. If I only plug in one or two disks it still boots up, but as soon as I use several (4 to 7 HD) I get the error and no disk is recognized.
If I use lsblk or fdisk the hard drives are displayed.
If I turn off the external USB drive I also have access to disks.
It must be a runtime problem, because the hard drives are scanned here and I can see it on the USB drive.
I haven't been able to reproduce such problems under Win11.
I hope someone can help us.
 
Last edited:
Hello w453y

I have the same "communication failure" problem on my PVE 8.3.4.
On my system I use a Fantec 8-way bay with
USB 3.2 Gen 2 (10G), USB-C connection. If I only plug in one or two disks it still boots up, but as soon as I use several (4 to 7 HD) I get the error and no disk is recognized.
If I use lsblk or fdisk the hard drives are displayed.
If I turn off the external USB drive I also have access to disks.
It must be a runtime problem, because the hard drives are scanned here and I can see it on the USB drive.
I haven't been able to reproduce such problems under Win11.
I hope someone can help us.
Hey vigorianer,

Can you try commenting out that SMART-related logic block/function, same as I mentioned in the post and tell me if the other disks appeared in your disks tab on GUI or not.
 
The relevant code inside /usr/share/perl5/PVE/Diskmanage.pm
I'm having the same problem but on my PBS. This path doesn't exist on PBS and I can't find any files with a partial match for "manage.pm" either. Any thoughts how I can fix this on my PBS?

Edit: @w453y your abovementioned fix/hack worked for me as well on my PVE. PBS I'm still up a creek without much of a paddle
 
Last edited:
  • Like
Reactions: w453y
Hi w453y,

this is what my diskmanag.pm looks like. I copied it out. I hope you can get something out of it.
My HD hard drives are all displayed after the connection error with lsblk.
It is only noticeable that when I start with one or two hard drives in the external 8-bay housing, they are mounted. If I have more drives, I get the connection error.

As I also have a PBS running, I can only work with the HD drives to a limited extent.





if (!$nosmart) {
eval {
my $smartdata = get_smart_data($devpath, !is_ssdlike($type));
$health = $smartdata->{health} if $smartdata->{health};

if (is_ssdlike($type)) { # if we have an ssd we try to get the wearout indicator
my $wear_level = get_wear_leveling_info($smartdata);
$wearout = $wear_level if defined($wear_level);
}
};
}
 
Hi w453y,

this is what my diskmanag.pm looks like. I copied it out. I hope you can get something out of it.
My HD hard drives are all displayed after the connection error with lsblk.
It is only noticeable that when I start with one or two hard drives in the external 8-bay housing, they are mounted. If I have more drives, I get the connection error.

As I also have a PBS running, I can only work with the HD drives to a limited extent.





if (!$nosmart) {
eval {
my $smartdata = get_smart_data($devpath, !is_ssdlike($type));
$health = $smartdata->{health} if $smartdata->{health};

if (is_ssdlike($type)) { # if we have an ssd we try to get the wearout indicator
my $wear_level = get_wear_leveling_info($smartdata);
$wearout = $wear_level if defined($wear_level);
}
};
}
Before making any changes please backup that file first by running cp /usr/share/perl5/PVE/Diskmanage.pm{,.bak} then try to comment out that part of the code or remove it; it should look like the following:
Perl:
if (!$nosmart) {
}

After that, restart the pvedaemon by running systemctl restart pvedaemon
Then, I believe all your disks will be shown in GUI.