=== get_disks.php === /dev/null"); if (empty($boot_mount)) { $boot_mount = shell_exec("df / | tail -n 1 | awk '{print $1}'"); } if (!empty($boot_mount)) { $usb_drive = preg_replace('/[0-9]+/', '', basename(trim($boot_mount))); } // 2. Автоматически определяем диск текущей запущенной ОС (Ubuntu / Донор) $current_os_drive = ''; $root_mount = shell_exec("findmnt -n -o SOURCE / 2>/dev/null"); if (!empty($root_mount)) { $current_os_drive = preg_replace('/[0-9]+/', '', basename(trim($root_mount))); } // 3. Получаем список физических дисков $sys_blocks = glob('/sys/block/sd*'); if (empty($sys_blocks)) { $sys_blocks = glob('/sys/block/nvme*'); } $disks = []; // [Этот блок находится внутри api/get_disks.php] foreach ($sys_blocks as $block) { $disk_name = basename($block); // СТРОГИЙ ФИЛЬТР: Скрываем ТОЛЬКО и ИСКЛЮЧИТЕЛЬНО установочную флешку // Все остальные диски (даже со старыми Linux/Windows) обязаны отображаться! if ($disk_name === $usb_drive) { continue; } // Пропускаем виртуальные loop-устройства и CD-ROM if (strpos($disk_name, 'loop') === 0 || strpos($disk_name, 'sr') === 0) { continue; } // Читаем размер диска $size_sectors = (float)trim(file_get_contents("$block/size")); $size_gb = round(($size_sectors * 512) / (1024 * 1024 * 1024), 1); // Игнорируем слишком маленькие накопители (меньше 2 ГБ) if ($size_gb < 2) { continue; } // Читаем модель диска напрямую из sysfs ядра Linux $model_path = "$block/device/model"; $disk_model = "Unknown Storage Device"; if (file_exists($model_path)) { $disk_model = trim(file_get_contents($model_path)); $disk_model = preg_replace('/\s+/', ' ', $disk_model); } $disks[] = [ 'name' => $disk_name, 'size' => $size_gb . ' GB', 'model' => $disk_model ]; } echo json_encode([ 'success' => true, 'disks' => $disks ], JSON_UNESCAPED_UNICODE); exit;