From c40d87b3ae3772c4b43e35d14191ea8959f1ca43 Mon Sep 17 00:00:00 2001 From: Alexander Shaduri Date: Mon, 8 May 2017 16:47:52 +0000 Subject: [PATCH] Require gtk2 2.6.0 until we move to 2.24.0. Win32 drive detection: stop scanning only after 3 not-found drives, so that we detect drives after old removed drives. --- gsmartcontrol/TODO | 155 ------------------ gsmartcontrol/configure.ac | 2 +- .../src/applib/storage_detector_win32.cpp | 14 +- 3 files changed, 12 insertions(+), 159 deletions(-) diff --git a/gsmartcontrol/TODO b/gsmartcontrol/TODO index 5f79f3b..cd59df6 100644 --- a/gsmartcontrol/TODO +++ b/gsmartcontrol/TODO @@ -72,161 +72,6 @@ Areca detection Credit Richard Kagerer. - - -Questions: - What is a non-interactive way to run CLI? "cli disk info"? - What about listing the controllers, or specifying the controller number? - Why are there duplicate slot numbers with ARC-1882ix? - Test on ARC-1231ML: - smartctl -a -d areca,13 /dev/arcmsr0 > smartctl_ml_d_areca_13.txt - smartctl -a -d areca,13/1 /dev/arcmsr0 > smartctl_ml_d_areca_13_1.txt - smartctl -a -d areca,1/1 /dev/arcmsr0 > smartctl_ml_d_areca_1_1.txt - smartctl -a -d areca,1/2 /dev/arcmsr0 > smartctl_ml_d_areca_1_2.txt - Test on ARC-1882ix: - smartctl -a -d areca,1 /dev/arcmsr0 > smartctl_ix_d_areca_1.txt - smartctl -a -d areca,14 /dev/arcmsr0 > smartctl_ix_d_areca_14.txt - smartctl -a -d areca,1/1 /dev/arcmsr0 > smartctl_ix_d_areca_1_1.txt - smartctl -a -d areca,24/1 /dev/arcmsr0 > smartctl_ix_d_areca_24_1.txt - smartctl -a -d areca,1/2 /dev/arcmsr0 > smartctl_ix_d_areca_1_2.txt - smartctl -a -d areca,1/3 /dev/arcmsr0 > smartctl_ix_d_areca_1_3.txt - smartctl -a -d areca,14/1 /dev/arcmsr0 > smartctl_ix_d_areca_14_1.txt - smartctl -a -d areca,14/2 /dev/arcmsr0 > smartctl_ix_d_areca_14_2.txt - smartctl -a -d areca,14/3 /dev/arcmsr0 > smartctl_ix_d_areca_14_3.txt - - ------------------------------------------------------------------------------------------------------ -I'm guessing controllers can be found by trying arcmsr0, arcmsr1, etc. When you get to a number that doesn't exist you get output like: - - C:\Program Files\smartmontools\bin>smartctl -d areca,1 -i -H -c arcmsr1 - smartctl 6.0 2012-10-10 r3643 [x86_64-w64-mingw32-win7-sp1] (sf-6.0-1) - Copyright (C) 2002-12, Bruce Allen, Christian Franke, www.smartmontools.org - - arcmsr1: No Areca controller found - =======> VALID ARGUMENTS ARE: ata, scsi, sat[,auto][,N][+TYPE], usbcypress[,X], usbjmicron[,x][,N], usbsunplus, areca,N[/E], auto, test <======= - -For disk probing I would try values of N = 1 to at least 24. Note drives won't be on contiguous channels. -E of 1 and 2 would probably be safe, maybe 3 if you really want. - -If there's no drive on the enclosure/slot you get: - - C:\Program Files\smartmontools\bin>smartctl -d areca,13 -i -H -c arcmsr0 - smartctl 6.0 2012-10-10 r3643 [x86_64-w64-mingw32-win7-sp1] (sf-6.0-1) - Copyright (C) 2002-12, Bruce Allen, Christian Franke, www.smartmontools.org - - Read Device Identity failed: empty IDENTIFY data - - A mandatory SMART command failed: exiting. To continue, add one or more '-T permissive' options. - -On my machine these come back instantaneously, so even higher values of N might be viable if you want to be exhaustive. - - -CLI output from an ARC-1231ML: - -CLI> disk info - # Ch# ModelName Capacity Usage -=============================================================================== - 1 1 INTEL SSDSA2M160G2GC 160.0GB System - 2 2 INTEL SSDSA2M160G2GC 160.0GB System - 3 3 INTEL SSDSA2M160G2GC 160.0GB System - 4 4 INTEL SSDSA2M160G2GC 160.0GB System - 5 5 Hitachi HDS724040ALE640 4000.8GB Storage - 6 6 Hitachi HDS724040ALE640 4000.8GB Storage - 7 7 Hitachi HDS724040ALE640 4000.8GB Storage - 8 8 Hitachi HDS724040ALE640 4000.8GB Storage - 9 9 Hitachi HDS724040ALE640 4000.8GB Storage -10 10 Hitachi HDS724040ALE640 4000.8GB Storage -11 11 Hitachi HDS724040ALE640 4000.8GB Backup -12 12 Hitachi HDS724040ALE640 4000.8GB Backup -=============================================================================== -GuiErrMsg<0x00>: Success. - - -And here it is from an ARC-1882ix: - -CLI> disk info - # Enc# Slot# ModelName Capacity Usage -=============================================================================== - 1 01 Slot#1 N.A. 0.0GB N.A. - 2 01 Slot#2 N.A. 0.0GB N.A. - 3 01 Slot#3 N.A. 0.0GB N.A. - 4 01 Slot#4 N.A. 0.0GB N.A. - 5 01 Slot#5 N.A. 0.0GB N.A. - 6 01 Slot#6 N.A. 0.0GB N.A. - 7 01 Slot#7 N.A. 0.0GB N.A. - 8 01 Slot#8 N.A. 0.0GB N.A. - 9 02 SLOT 01 N.A. 0.0GB N.A. -10 02 SLOT 02 N.A. 0.0GB N.A. -11 02 SLOT 03 N.A. 0.0GB N.A. -12 02 SLOT 04 N.A. 0.0GB N.A. -13 02 SLOT 05 N.A. 0.0GB N.A. -14 02 SLOT 06 N.A. 0.0GB N.A. -15 02 SLOT 07 N.A. 0.0GB N.A. -16 02 SLOT 08 N.A. 0.0GB N.A. -17 02 SLOT 09 N.A. 0.0GB N.A. -18 02 SLOT 10 N.A. 0.0GB N.A. -19 02 SLOT 11 N.A. 0.0GB N.A. -20 02 SLOT 12 N.A. 0.0GB N.A. -21 02 SLOT 13 N.A. 0.0GB N.A. -22 02 SLOT 14 ST910021AS 100.0GB Free -23 02 SLOT 15 WDC WD3200BEVT-75A23T0 320.1GB HotSpare[Global] -24 02 SLOT 16 N.A. 0.0GB N.A. -25 02 SLOT 17 Hitachi HDS724040ALE640 4000.8GB Raid Set # 000 -26 02 SLOT 18 ST31500341AS 1500.3GB Raid Set # 000 -27 02 SLOT 19 ST3320620AS 320.1GB Raid Set # 000 -28 02 SLOT 20 ST31500341AS 1500.3GB Raid Set # 000 -29 02 SLOT 21 ST3500320AS 500.1GB Raid Set # 000 -30 02 SLOT 22 Hitachi HDS724040ALE640 4000.8GB Raid Set # 000 -31 02 SLOT 23 Hitachi HDS724040ALE640 4000.8GB Raid Set # 000 -32 02 SLOT 24 Hitachi HDS724040ALE640 4000.8GB Raid Set # 000 -33 02 EXTP 01 N.A. 0.0GB N.A. -34 02 EXTP 02 N.A. 0.0GB N.A. -35 02 EXTP 03 N.A. 0.0GB N.A. -36 02 EXTP 04 N.A. 0.0GB N.A. -=============================================================================== -GuiErrMsg<0x00>: Success. - - - -When using -d areca,N format with N/E cards: -Smartctl: Device Read Identity Failed: empty IDENTIFY data - - ------------------------------------------------------------------------------------------------------ - - -driver: -These are present on pure Windows as well: -HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\arc -HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\arcsas -We could look for (but they could be integrated into Windows, so it's probably a bad idea): -HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\arcm_a64;ImagePath -HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\arcs_a64;ImagePath -HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\arcm_x86;ImagePath -HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\arcs_x86;ImagePath - - -when web interface is installed: -HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ArcHttpProxyServer;ImagePath -HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\archttp;InstallLocation - -when cli is installed: -HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\CLI;InstallLocation - contains "C:\Program Files (x86)\MRAID\CLI" - The exe is named cli. - -cli with no args: ----------------------------- -Copyright (c) 2004-2012 Areca, Inc. All Rights Reserved. -Areca CLI, Version: 1.10.0, Arclib: 330, Date: Aug 15 2012( Windows ) - -None. ----------------------------- - - - - - Credit Fabrice Bacchella for Linux CCISS detection. diff --git a/gsmartcontrol/configure.ac b/gsmartcontrol/configure.ac index 8cb4d58..cae5472 100644 --- a/gsmartcontrol/configure.ac +++ b/gsmartcontrol/configure.ac @@ -176,7 +176,7 @@ AC_ARG_ENABLE(abort-if-no-gtkmm, AS_HELP_STRING([--disable-abort-if-no-gtkmm], AC_MSG_NOTICE([Abort if no gtkmm is found: $app_cv_abort_if_no_gtkmm]) # iconview is available since 2.6.0. gthread is not enabled by default. -pkg_modules="gtkmm-2.4 >= 2.24.0" # gthread-2.0 >= 2.0 +pkg_modules="gtkmm-2.4 >= 2.6.0" # gthread-2.0 >= 2.0 # define ENABLE_GLIB and friends if it's found. gtkmm_found="no" diff --git a/gsmartcontrol/src/applib/storage_detector_win32.cpp b/gsmartcontrol/src/applib/storage_detector_win32.cpp index 28a57d5..e50f431 100644 --- a/gsmartcontrol/src/applib/storage_detector_win32.cpp +++ b/gsmartcontrol/src/applib/storage_detector_win32.cpp @@ -601,6 +601,7 @@ std::string detect_drives_win32(std::vector& drives, Execut debug_out_info("app", "Starting sequential scan of \\\\.\\PhysicalDriveN devices...\n"); + int num_failed = 0; for (int drive_num = 0; ; ++drive_num) { // If the drive was already encountered in --scan-open (with a port number), skip it. @@ -617,10 +618,17 @@ std::string detect_drives_win32(std::vector& drives, Execut HANDLE h = CreateFileA(phys_name.c_str(), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); - // The numbers seem to be consecutive, so break on first invalid. + // The numbers are usually consecutive, but sometimes there are holes when + // removable devices are removed. Try 3 extra drives just in case. if (h == INVALID_HANDLE_VALUE) { - debug_out_dump("app", "Could not open \"" << phys_name << "\", stopping sequential scan.\n"); - break; + ++num_failed; + debug_out_dump("app", "Could not open \"" << phys_name << "\".\n"); + if (num_failed >= 3) { + debug_out_dump("app", "Stopping sequential scan.\n"); + break; + } else { + continue; + } } CloseHandle(h);