StableBit DrivePool 2.X ======================= | Limitations =========== * Not compatible with the Windows Subsystem for Linux. Info ==== [D] = Driver was modified (reboot required after update) Summary ======= * Dark mode. RELEASE ======= 2.3.1.1448 ---------- * Release final. BETA ==== .1437 * [D] [Issue #28675] Empty volume names were not being saved. 2.3.1.1434 ---------- * BETA. .1433 * Reduced the cloud synchronization frequency on the free tier. * Improved the cloud App UI service startup experience. .1430 * Live connection protocol V10: - Added support for large packets. .1429 * Misc. theming fixes. .1427 * [Issue #28668] Added a new cloud app state for pool part removal failures. * BETA builds now use the BETA cloud API endpoint. * Added an update ready cloud app state for notification purposes. .1421 * Added an update available cloud app state. * Enabled cloud synchronization for update settings. 2.3.1.1410 ---------- * Added theme palette support to the cloud dialogs. .1398 * Disable the remote control bar animation when animations are disabled in the OS. * Added new dark, light, and high contrast themes. .1391 * Detect and mitigate clock shifts into the past when setting cloud states. .1390 * [D] [Issue #28653] Fixed compatibility with iOS/iPadOS Files <-> SMB2 <-> DrivePool. RELEASE ======= 2.3.0.1385 ---------- * Release final. * [Issue #28645] Temperature (from the StableBit Scanner) was not being shown in the tooltips of pooled drives. .1384 * Release candidate. * Added a StableBit Cloud+ trial expiration notice. * [Issue #28642] UI placement persistence was being cleared on non-primary monitors. .1379 * Release candidate. * Updated translations. - Use "Switch to English" from the in-app menu to disable translations. - http://translate.covecube.com to submit corrections for future releases. - Corrections with the highest votes are used. BETA ==== .1375 * For notification purposes, do not report balancing events unless data actually needs to be moved. * Improved HTTP 503 recovery for the StableBit Cloud. * Auto 30 day trial for the StableBit Cloud. 2.3.0.1372 ---------- * BETA. .1371 * Fixed thread pool tasks getting lost. .1368 * When linked to the cloud, clicking through to purchase a license from within the app will automatically add the purchased license to the cloud. .1367 * Added support for StableBit Cloud+. .1365 * Fixed an HMAC validation optimization in the live connection protocol. .1364 * If started sending real-time metrics, then keep sending for at least 1 minute. 2.3.0.1363 ---------- * BETA. * Fixed StableBit Cloud integration issues with the Windows Home Server / Essentials. .1359 * Fixed a user atom leak in the service. .1358 * Optimized how remote control deals with firewalled peers to reduce CPU usage. Firewalled peers will be rechecked every hour to determine if their firewalled status has changed. * Optimized brush resource usage. .1353 * Fixed an issue in the remote control keep-alive checker that was causing excessive resource consumption when a connection could not be established to a remote IP. .1352 * [Issue #28583] Fixed an OverflowException in the Volume Equalization balancer. * [Issue #28618] Always check duplication tags for consistency and perform repair before checking file duplication consistency. * [Issue #28618] Duplication tags with a duplication count > 9 were not being repaired if damaged. * [Issue #28618] Added additional log warnings when repairing duplication tags. * Faster live connection recovery after connection loss. .1347 * Added support for linking to a site from the StableBit Cloud installer. * [Issue #28609] Added a simplified chinese machine seeded community translation. .1345 * Parallelized pre-shutdown processing. * Fixed "unable to enumerate folder" error when setting folder duplication. * [Issue #28612] Clean up excessive duplication error records on startup. .1342 * Fixed statistics not being sent without a live connection. .1341 * Cloud storable metadata was being persisted to disk too often. * To optimize idle CPU usage, run 1 second resolution performance sampling only when the cloud requires it. .1340 * Only send the real-time metrics that are actively being observed. .1338 * Application settings synchronization updated: - New V4 API (with new back-end store). - Existing settings will be migrated automatically. - Existing links to statistics will be maintained. - Certain features in the cloud will be disabled for older builds that use the previous APIs. .1335 * Send real-time metrics when the web dashboard is open. * Never synchronize unchanged settings to the cloud. .1331 * Fixed a deadlock in the cloud token refresh API. .1328 * Improved the reliability of live reliable packets with a 64-bit sliding window and other improvements. .1327 * Cloud API tier switching improvements. * Handle server keep-alive failures from the cloud API. * A full store synchronization should not take too long when it encounters adverse network conditions. .1321 * Improved how the live connection protocol deals with long-term network interruptions and network changes. .1319 * DataInfo binder should not access disposed objects. .1318 * Power state transitions support for the cloud. * Extended the live connection protocol to detect one way restrictive firewalls. .1311 * Optimized code to reduce idle CPU usage. .1306 * Recover from invalid cloud object / change IDs. .1305 * Bind the disk state (missing, error, working, ...) to the cloud. * Fixed disk identification not showing up for missing disks after a service restart. * Resynchronize app states on live connection loss. * Fixed an incorrect metrics cloud object ID on send. .1300 * Added additional cloud UI bindings for pool tags. .1295 * Live connection protocol updates: - Server connection steering for load balancing support. - Improved connection management. .1294 * [Issue #28583] Balancing was sometimes not grouping pool parts into storage unit groups. * Update VDS physical disk IDs on existing pool parts. * Fixed miscellaneous potential null references based on static analysis. .1293 * [Issue #28586] Do not allow access to FileSizeTracking / CalculateBalanceRatio after the pool has been disposed. .1292 * Added open files count metrics / statistics. * Report pool free space in the cloud summary app state. .1289 * Added additional per-disk information to cloud summary app state. .1285 * Added support for StableBit Cloud+ API endpoint switching. * Fetch the live connection servers from DNS. .1282 * [Issue #28571] If an update file is missing when clicking install, requeue it for download. * [Issue #28571] Periodically check to make sure that a downloaded update file is still there. * Added additional live connection servers. * Updated StableBit Cloud dev / local scope domains. .1278 * [Issue #28551] Clarified balancing settings as suggested: - Balancer tooltip now indicates if a balancer can force immediate balancing or set real-time file placement limits. - Force immediate balancing is independent of the automatic balancing setting. - Scanner balancer is the only one that can force immediate balancing. .1277 * Fixed restarting the notifications client in a disconnected RDP session. .1273 * Fixed a crash in the activation required notification tray. * Fixed a cloud store synchronization issue that was causing objects to be reverted to their previous state. This was rare but caused all kinds of strange intermittent behavior, such as licenses appearing to get spontaneously deactivated once in a while. * Tweaked cloud license activation timing. * Fixed auto cloud linking. .1265 * When cloud licensing is enabled and there is no license found, explicitly show that in the cloud status dialog. * Updated the cloud update signature keys to be in sync with the StableBit Cloud Installer. .1262 * Integration with the StableBit Cloud Installer (https://stablebit.cloud/Area/Apps): - Do not auto-launch. - Automatically link to the cloud. .1260 * General reliability improvements for AppStates / Notifications. .1255 * Disable local email notifications when StableBit Cloud email notifications are enabled. * Handle unknown storable types during cloud synchronization. .1249 * Fixed repetitive license queries. .1248 * Report service status to the cloud. 2.3.0.1244 ---------- * Metrics / statistics from older builds will no longer be accepted. .1243 * Improved AppState retry logic. * [Issue #28501] Simplified license expiration detection. .1240 * Fixed duplicating / balancing app state race condition. .1239 * Tweaked the cloud update download retry delay. * Added StableBit Cloud tooltip icons throughout the UI to indicate what is being synchronized with the cloud and in some cases with other apps. * Updated StableBit Cloud branding. .1236 * [D] [Issue #28485] Do not report a file change when the FilePositionInformation is set. * Requeue metrics if unable to send using the API. .1233 * Added support for transactional consistency to AppStates. .1231 * Live Connection protocol V8. .1224 * Increased Live Connection retransmission aggressiveness. .1222 * Statistics are now reported every 30 minutes. * Not all statistics were being reported at shutdown. .1220 * [Issue #28475] Fixed license activation under non-Gregorian calendars. .1219 * Extended the live connection protocol to support health and activity reporting: - Health alerts will be reported at all times. - Activity alerts will only be reported when the dashboard is open. - Summary reporting will be accelerated when the dashboard is open. - The HTTP API will be used when the live connection is not available or as a fallback. * Restart tray notifications on failure. .1217 * Health / activity reporting retry control. .1216 * Enabled real-time metrics in activity alerts. .1215 * Added a health summary to health and activity reporting. .1210 * [D] [Issue #28460] Fill in the FILE_ATTRIBUTE_REPARSE_POINT attribute, file ID, and reparse tag, when STATUS_BUFFER_OVERFLOW is returned. .1204 * Fixed disappearing health alerts after StoreSynchronizationService reconnect. .1202 * Added support for hiding health alerts in the cloud. .1200 * Added the StableBit Cloud health and activity reporting feature. .1197 * [D] [Issue #28459] Removed the in-flight IRP limit for reads and writes on Windows 10 / Windows Server 2016 / Windows Server 2019 and newer. .1195 * [D] [Issue #28458] Support for FILE_SUPPORTS_EXTENDED_ATTRIBUTES, FILE_FILE_COMPRESSION, FILE_SUPPORTS_OBJECT_IDS, and FILE_SUPPORTS_ENCRYPTION, is dependent upon the capabilities of the pool parts. .1193 * [D] [Issue #28455] Return STATUS_INVALID_INFO_CLASS for IRP_MN_QUERY_DIRECTORY when the info class is not recognized. .1190 * Fixed OS name reporting to the StableBit Cloud. * Fixed cloud balancers not synchronizing sometimes. * Fixed cloud licenses not activating in a timely manner. .1185 * Extended the licensing system to be better at automatic activation / deactivation when connected to the StableBit Cloud. .1165 * [Issue #28438] Added a Danish machine seeded community translation. .1163 * [Issue #28433] The external drive flag for pool parts was not being updated. .1161 * [D] Fixed a crash on shutdown. .1159 * Fixed a deadlock in the DataInfoBinder. * [Issue #28416] Added PoolPartUpdates_AlwaysConsistent config option to disable the remeasure and duplication check passes after a missing disk comes back online. .1157 * Tweaked Web UI object synchronization throttling rules. .1155 * Added the pool organization bar to the Web UI. .1154 * Tuned statistics reporting intervals to enable additional statistics in the StableBit Cloud. .1152 * Included balancing plugins with the main installer. * [D] Rebuilt the virtual disk driver. - Using the latest tooling. - Certified for Windows Server 2019. - Fixed GPT emulation (was causing issues on Windows 10 Insider Preview). .1144 * Web UI compatibility changes for the StableBit Cloud. .1142 * [Issue #28320] Disk identification infos are no longer persistent. .1138 * [D] Upgrade all legacy pool IDs to use a unique legacy pool ID. - Legacy pools are pools that were originally created with versions < 1.3 (before 2013). - Multiple legacy pools connected to the same StableBit Cloud account will no longer share the same settings. - Upgraded legacy pools will continue to emulate legacy MBR disks in order to prevent mount point reassignment. Non-legacy pools emulate GPT disks. * Fixed metrics flush on shutdown. .1130 * [Issue #28379] Added a DrivePool_CultureOverride setting to force a particular UI language (will need to restart the service and UI). * If pool synchronization fails, write an error report and retry 10 times. .1128 * Added per-object type synchronization throttling rules. * Real-time object synchronization is now active only when the StableBit Cloud Web UI is open. - Reported in the live connection status tooltip. .1124 * Improved StableBit Cloud uptime status reporting: - Before allowing new connections, check the availability of the service. - If the service becomes unavailable while connected, all functionality pauses. - Do not show security specific errors unless there is an explicit deauthorization from the service. .1123 * [D] [Issue #28336] Added support for FSCTL_SET_PURGE_FAILURE_MODE. * [D] Signed driver with SHA-256. .1121 * Fixes for StableBit Cloud license management. .1118 * Added status tooltips to each connected StableBit Cloud service: - Application settings synchronization: - Shows how many objects were synchronized to / from the cloud in this session (objects are only synchronized when they change). - Live connection: - Shows the current connected host. - Packet loss percentage on send / receive. - Packet retransmission factor on send (e.g. x1.0 means 1 additional packet had to be sent to ensure reliability of the connection per each one sent normally). - License management: - Shows whether cloud licensing is enabled. - If enabled, shows whether a license was found in the cloud or not for the current app. - Enhanced update delivery: - Shows the currently subscribed to scope and channel for update push notifications. - Shows if an update was found and which version. - Metrics and statistics: - Shows if real-time metrics are currently being sent via the live connection (if the Web UI is open in the cloud). .1117 * Lowered timeouts on metrics API calls. * Fixed a thread pool exhaustion caused by metrics if the server is not responding. .1112 * Improved overall handling of StableBit Cloud server downtime. .1106 * Live connection protocol reliability fixes. * Fixed a lockup in the StableBit Cloud token service. * Added a backup automatic update mechanism. * Metrics improvements to prevent double reporting when the transmission protocol switches. .1098 * Added metrics support for the StableBit Cloud: - Various metrics are supported, depending on the application (e.g. disk space, performance, bandwidth). - Metrics can be sent either in real-time (for immediate display purposes), or periodically (for historical statistics). - Real-time metrics require a live connection and will be enabled as needed, depending on the web app usage. - Historical metrics are sent at all times. - 3 transmission protocols are supported: - Unreliable secure UDP (very low overhead): used for real-time metrics. - Reliable secure UDP (low overhead): used for historical metrics. - JSON HTTP (normal overhead): used for historical metrics when UDP is not available or cannot be used due to poor network conditions. - Batching of multiple metrics is supported on all protocols for efficient transmission (up to 60 metrics per 1000 bytes for UDP). .1079 * If remote control cannot be started for any reason, show a warning in user feedback. .1078 * Added the cloud DataInfo binder, enabling the ability to build real-time app UIs in the cloud. .1074 * Updated the remote control protocol to handle computer names more consistently. * Updated the service control DLL in the installer in order to avoid unnecessary reboots. * The performance pane was not always getting enabled when using remote control. .1069 * For remote control, fixed multicast when multiple connected adapters are present and the LAN adapter doesn't have the lowest interface metric. * Added a what's new link to the automatic cloud update dialog. .1064 * The service will now start and stop the notification UI automatically for all active sessions. .1057 * Fixed Windows tray notifications when balancing plugins are installed. .1056 * Require administrative access for the UI. .1052 * Improved the reliability of the live connection in the presence of heavy packet loss. * Added StableBit Cloud powered automatic updates. - Instant update notifications. No need to "check for updates", updates are pushed to you in real-time as soon as they're released. - Support for multiple release channels (Dev BETA, BETA, Release Final). - Automatic downloads. - Legacy automatic updates will be disabled when connected to the StableBit Cloud. * Fixed tooltip positioning. .1030 .1028 * Added centralized licensing with the StableBit Cloud. - The local licensing UI will be inaccessible when using cloud licensing. * [Issue #28236] Trim whitespace before using an email address for notifications. * Added dev / local server toggles for the StableBit Cloud. * Added the ability to target specific versions with automatic updates. .1025 * Enabled StableBit Cloud integration: - Application settings synchronization: - Synchronizes all persistent settings to the cloud. - If something goes wrong and you lose your settings locally, or you have to reinstall the OS, simply connect the app to the cloud to restore your settings. - StableBit DrivePool specific features: - Per pool persistent data (such as Performance settings, Balancing settings) are automatically synchronized across different app instances connected to the same StableBit Cloud account. * Optimized how Store item change notifications are issued: - Coalesce multiple item change notifications into a single notification if they are issued over the same object and happen within the same lock context. - Use 2 dedicated background item change notification threads that are separate from other change notification threads. - Do not throttle item change notifications if the maximum notification queue size is exceeded, simply drop any additional notifications and log a warning. Release ======= 2.2.5.1237 ---------- * [D] [Issue #28485] Do not report a file change when the FilePositionInformation is set. * [Issue #28475] Fixed license activation under non-Gregorian calendars. * [D] [Issue #28460] Fill in the FILE_ATTRIBUTE_REPARSE_POINT attribute, file ID, and reparse tag, when STATUS_BUFFER_OVERFLOW is returned. * [D] [Issue #28459] Removed the in-flight IRP limit for reads and writes on Windows 10 / Windows Server 2016 / Windows Server 2019 and newer. * [D] [Issue #28458] Support for FILE_SUPPORTS_EXTENDED_ATTRIBUTES, FILE_FILE_COMPRESSION, FILE_SUPPORTS_OBJECT_IDS, and FILE_SUPPORTS_ENCRYPTION, is dependent upon the capabilities of the pool parts. * [D] [Issue #28455] Return STATUS_INVALID_INFO_CLASS for IRP_MN_QUERY_DIRECTORY when the info class is not recognized. 2.2.4.1162 ---------- * [D] Fixed a crash on shutdown. * [D] Rebuilt the virtual disk driver. - Using the latest tooling. - Certified for Windows Server 2019. - Fixed GPT emulation (was causing issues on Windows 10 Insider Preview). * [Issue #28320] Disk identification infos are no longer persistent. * [D] Upgrade all legacy pool IDs to use a unique legacy pool ID. - Legacy pools are pools that were originally created with versions < 1.3 (before 2013). - Upgraded legacy pools will continue to emulate legacy MBR disks in order to prevent mount point reassignment. Non-legacy pools emulate GPT disks. * [D] [Issue #28336] Added support for FSCTL_SET_PURGE_FAILURE_MODE. * [D] Signed driver with SHA-256. 2.2.3.1019 ---------- * Release final. * [Issue #28219] Hidden volumes don't have a volume GUID path so exclude them from use. * Fixed service-based localizations. RC == 2.2.3.1016 ---------- * Release candidate. * Updated localizations. - Big updates to Dutch, Japanese, Russian community translations, and miscellaneous updates to other languages. - Thank you to everyone who submitted translations! - Visit http://translate.covecube.com to submit any corrections (and don't forget to vote up the best translations). BETA ==== .1012 * [Issue #28183] Fixed dpcmd dependencies. * [D] [Issue #28178] Added support for FSCTL_GET_REFS_VOLUME_DATA. .1008 * [D] [Issue #28108] Added support for FSCTL_GET_NTFS_VOLUME_DATA. * Improved UI startup time. .978 * [D] [S] [Issue #28081] Increased the amount of stack space reserved on callouts. .963 * [D] [S] [Issue #28076] Real-time file placement limits were not always being respected when real-time duplication was disabled. .961 * [Issue #28069] Added an option to sort the pooled disks list by drive letter / mount point. - If multiple mount points are defined, the shortest one is used. - If no mount points are defined, disks are sorted by physical disk number. .960 * [D] [S] [Issue #28059] Bytes per sector will now be reported based on what individual pool parts report. This fixes compatibility with 4K drives (that don't emulate 512 bytes per sector) and applications that perform unbuffered (non-cached) I/O on the pool. - If CoveFs_ForceSectors512 is set to true, then 512 bytes per sector will always be reported. - If CoveFs_ForceSectors4K is set to true, then 4096 bytes per sector will always be reported. - Otherwise, on each query, each pool part will be asked for its bytes per sector and the largest value will be reported for the pool (only 512 and 4096 bytes per sector are supported). .957 * [Issue #28039] Removed a GIF from the licensing window. .953 * [Issue #28031] Fixed missing disk warning after reboot when used with StableBit CloudDrive. .952 * [D] [S] Added additional progress tracing to measurement code. 2.2.3.950 --------- * [D] [S] Rebuilt with 17763.134 WDK. Tested and signed for Windows Server 2019. .948 * [Issue #27993] Factor out WMI from the system volume device ID query at service start. .947 * [Issue #27985] Updated miscellaneous driver deployment code to be FIPS compliant. * [Issue #27985] Made the licensing engine FIPS compliant. .946 * [D] [S] [Issue #27976] For deleted files, in response to any future IRP_MJ_DIRECTORY_CONTROL/IRP_MN_NOTIFY_CHANGE_DIRECTORY IRPs, issue an explicit STATUS_DELETE_PENDING without first pending the IRP. .943 * [D] [S] [Issue #27973] Issue a STATUS_DELETE_PENDING in response to any pending IRP_MJ_DIRECTORY_CONTROL/IRP_MN_NOTIFY_CHANGE_DIRECTORY IRPs when a file is deleted. .941 * Do not save a copy of the most recent log entries along with an error report (ErrorReporting_SaveLog). .940 * [Issue #27945] Update the pool part paths if the persistent mount points (aka volume GUID paths) change. .939 * [Issue #27942] Updated CRT dependency to the latest 2017 and fixed deployment on x86. .938 * [D] [S] [Issue #27836] Report as CoveFS to haneWIN NFS. .936 * [D] [S] Fixed a deadlock in real-time file size tracking. Release ======= 2.2.2.934 --------- * Release final. RC == 2.2.2.933 --------- * When running the incorrect installer architecture (x86 vs x64), display a more informative error message. * [D] [S] Measurement failures were sometimes being treated as a success and were not being shown in the user feedback UI. * [D] [S] Fixed an intermittent error reading the duplication count tags. - This was causing measuring to end prematurely, among other issues. .928 * [D] [S] [Issue #27757] Fixed a memory leak due to ECP handling. Release ======= 2.2.1.926 --------- * Release final. RC == .925 * [D] [S] [Issue #27818] Fixed bug in filename normalization after FileNameInformation query, when dealing with root directories. .923 * [Issue #27741,#27778] If a file was deleted while balancing was running, there was a chance that a "The system cannot find the path specified" error was encountered. 2.2.1.922 --------- * Release candidate. BETA ==== .921 * [Issue #27721] Restored the ability to show both pool and disk performance at once, along with variable resizing. .920 * [Issue #27792] When "balance immediately" is enabled, and "not more often than every..." is not checked, do not post task completed messages to user feedback in order to avoid excessive feedback. .919 * Added new dpcmd command: "delete-removed-poolparts" - This will delete all removed pool parts and their contents on a volume. - Pool parts that are part of a pool are skipped. - Handles read-only attributes and ACL security. .918 * [Issue #27685] Added new dpcmd command: "delete-poolpart-reparse-points" - Deletes all reparse points under all pool part folders that are part of a pool. Reparse points are not allowed to exist in pool part folders. .917 * [Issue #27796] Only save the last balancing state if pool parts were rebalanced. .916 * [Issue #27740] After using dpcmd's "ignore-poolpart", if the last pool part in a pool is ignored, that drive and any drives that were missing at the time, were not being made available for use in other pools. .915 * [D] [S] [Issue #27786] Fixed a crash due to FCB rekeying (introduced in .911). .913 * [Issue #27720] Added explicit trace messages when pool part rebalancing or file placement rebalancing is performed. * [Issue #27720] Got rid of the excessive and misleading "Balance not critical" log messages. That message will now be logged once and only when balancing is skipped due to it not being critical. * [Issue #27720] When manually rebalancing, the last known model state is reset. * [Issue #27720] Added the FileBalance_CalculateRatioInterval advanced setting which controls how often the balancing ratio is recalculated, regardless of how much data has changed on the pool. * [Issue #27720] Added FileBalance_CalculateRatioNotMoreOftenThan which throttles balancing ratio calculations when a lot of data changes on the pool all at once. .911 * [D] [S] [Issue #27778] Fixed a potential "file not found" error after a rename. .909 * [Issue #27785] Fixed upgrade problem with installer. * Changed CRT dependency to 2017 (v141). Release ======= 2.2.0.906 --------- * [D] [S] Release final. * Translations synchronized with OneSky (http://translate.covecube.com). RC == .904 * [D] [S] All code signing now uses a Covecube Inc. EV (extended validation) code signing certificate and the file system is signed by Microsoft. 2.2.0.903 --------- * [D] Fixed erroneous and frequent "Incorrect function" error reports and event log entries. * [D] [Issue #27727] Fixed ECP handling. - This was causing an issue with Windows Defender on Windows 10 and Microsoft update KB4052623 (it did not affect Windows Defender on Windows Server 2016). - The KB update would fail to install and Windows Defender would crash sporadically. 2.2.0.901 --------- * [D] Fixed measuring issue introduced in RC build 900. 2.2.0.900 --------- * Eliminated some extraneous user feedback. * [D] Reduced non-paged memory consumption of reparse points. .898 * When using another language, added the ability to switch to English from Settings. * Deprecated the DrivePool_CultureOverride setting. * Applied localizations. - Professional translations for French, Italian, German and Spanish. - Community translations for Bulgarian, Japanese, Dutch, Polish and Russian (http://translate.covecube.com/). * [D] Release candidate. BETA ==== .896 * [Issue #27696] Fixed some scrolling issues in the balancing window. .895 * [D] [Issue #27704] Added a new setting (CoveFs_WaitForPoolsAndPoolPartsAfterMountMs) that controls how long the service will wait for all of the detected pools to finish mounting, and then for all of the known pool parts to get recognized on those pools (see CCR: https://stablebit.com/Admin/IssueAnalysis/27704). * [Issue #27704] Changed the default of CoveFs_WaitForKnownPoolPartsOnMountMs to 10000. .893 * [Issue #27699] Added the ability to force a recheck of file duplication across all of the pools. * [Issue #27699] Updated the file part automatic conflict resolution rules to better deal with file parts that have the same last write time but different sizes. In that case, the smaller file parts will be replaced with the larger ones. * [D] [Issue #27699] When running check-pool-fileparts using dpcmd, the attributes of file parts will be checked for consistency. If inconsistencies are found, the Service will be notified and will resolve them. .892 * BitLocker should monitor for unlocks while waiting for pool parts to arrive. .891 * [D] [Issue #27695] Revamped how pools are mounted in order to speed up the mounting process, and at the same time, ensure that all of the known pool parts are present at pool mount time. - Pools can now be made aware of how many total pool parts they are comprised of. - Legacy pools, prior to receiving this information, will function with an "unknown" pool part count, just as before. - If a pool is aware of how many pool parts it's made of, at mount time, it will wait for all of those pool parts to arrive before allowing the OS to finish mounting the pool. - This wait time is controlled by a new setting CoveFs_WaitForKnownPoolPartsOnMountMs. Set to 0 to disable this wait. - Additionally, just as before, all pools can wait for the system to finish enumerating new volumes. - This wait time is controlled by CoveFs_WaitForVolumesOnMountMs. Again, you can set it to 0 to disable. - Generally, this wait will not take place if the pool is aware of how many pool parts it has. .890 * Fixed a few file duplication log messages. .889 * [D] Improved performance opening / creating files, especially when there are many thousands of files open on the pool (optimal up to ~1 million). * Read / write pool performance now shows the 10s average in the tooltip. * Added an open file count to the pool performance pane, including the file open rate in the tooltip. - This is not a count of open handles but a count of how many unique files are currently open on the pool (including files that don't have handles associated with them). .885 * [D] Renaming the volume name of a pool that had other pools as pool parts did not work. * [Issue #27679] Boot time logging trace files are now named *.Boot.etl to differentiate them from regular file system trace files. * [Issue #27679] The switchover from boot time logging -> regular file system logging now takes place at the end of service startup. The initial state of file system logging is controlled by CoveFs_TracingEnabled (which is disabled by default). If boot time logging was taking place, then file system logging will always be enabled by default with a 1 second flush to disk. * [Issue #27679] Boot time logging now flushes the log to disk every second. * [Issue #27679] Fixed boot time logging generating empty trace files. 2.2.0.881 --------- * [D] [Issue #27689] Added CoveFs_FastIo advanced setting. When set to false, Fast I/O will not be used in the file system. .878 * Performance sampling was sometimes not starting when a new pool was created. * Fixed deadlock when starting performance sampling. .877 * [D] Fixed reparse point directory enumeration attribute issue for reparse points that exist directly under the root. * [D] Upgraded to the latest WDK (1709) and compiled driver in VS 2017. .876 * Fixed service deadlock in the performance sampling controller. .875 * Translate pool parts under disk performance. .874 * Disable drive letter toggle menu item while toggling drive letter. .871 * [Issue #27665] Improved drag and drop on the Balancers tab. .870 * [Issue #27663] Use the kernel path to locate the VDS volume for a pool part. .869 * Preserve the currently selected drive across UI restarts. .868 * Performance sampling would not start when the UI was opened. * [Issue #27625] Lowered CPU usage when the performance pane is open. .866 * [Issue #27655] Added an indicator to the pooled disk tooltip to show when a drive is detected to be external. * [D] [Issue #27655] When a file is opened, each open context is given a priority. Read striping will always work over the highest available priority class. Priority classes from lowest to highest are: - CloudDrive, CloudPool, LocalExternalDrive, NonCloudPool, StandardDrive .865 * Added an option to sort pooled disks by the physical disk number. .864 * [Issue #27653] Fixed issues applying JSON service settings. .863 * [D] [Issue #27638] Added support for FileRenameInformationEx. .862 * [D] [Issue #27647] Processing a reparse point that ended in a \ on Windows 7 would cause NTFS to crash. .861 * Fixed pool selection bar not loading when there are no pools. .860 * Use the file size and not the file allocation size when reporting file pattern violations. * When disabling duplication, file placement rules should have been respected by deleting files that violated those rules first. * File placement balancer was violating the fill limit at times. * Synchronize the performance pane state across all of the pools. * Added a toggle button to hide pool performance in the UI. .859 * Do not show the performance pane until the first sample has been collected. Instead, show a loading bar. * When a suitable destination could not be found for a file placement rule (i.e. not enough target disks selected to fit all of the files necessary), the total reported size of files that weren't moved was sometimes being exaggerated in the warning UI. * Show the maximize / minimize buttons in the vertical UI. * [Issue #27631] Canceling an update download wouldn't work in a timely manner if the server wasn't responding. * Added an option to force an update check under the settings menu. .858 * Added the ability to easily assign and remove drive letters from the Manage Pool menu. - The same drive letter will be reassigned to the same drive, whenever possible. - Pools that are not part of other pools and have no drive letter assigned to them will get a warning in the UI. * [D] Fixed an issue with the virtual disk driver pool spawning code that would cause the same pool to be spawned more than once. .854 * Miscellaneous UI fit and finish tweaks. * Updated disk tooltips. * Fixed DPI on PNGs. .853 * Fixed a UI crash when changing duplication. * Background file duplication was not respecting file placement rules correctly. * Fixed path hint construction for file duplication. * Changed how path names are displayed in the UI. - Hide kernel volume path prefixes. - Translate pool parts that represent other pools into human readable pool names. * Fixed the check boxes in the pool selection bar context menu. 2.2.0.852 --------- * [Issue #27628] Fixed error message when opening performance pane. * Added a context menu to the pool selection bar. * Display used space vs. capacity in the pooled disks list when in horizontal UI mode. 2.2.0.848 --------- * Fixed issue upgrading from .561. 2.2.0.847 --------- * [D] Fixed crash in Fast I/O lock / unlock path. .846 * Fixed drive removal when files are in use. .845 * Fixed "Can't cancel task" UI error. 2.2.0.844 --------- * [D] Fixed lockup while shutting down hierarchical pooling and cloud drives. .843 * Fixed pool enumeration issue on service startup. .841 * Fixed non-pooled volumes not updating their mount paths in the UI. .840 * Force deletion of the recycling bin, "System Volume Information", and .covefs folders when a pool part is being removed. (deal with invalid ACLs and read-only attributes). * Perform background duplication after measuring completes, if it's inconsistent. * Sort pools by name. * [D] Fixed hierarchical pool part duplication tags. Hierarchical pool part duplication tags will reset. * Fixed pooled disk list UI flicker. .836 * [D] [Issue #27622] Fixed detection of CoveFS revision mismatches after upgrade. .835 * [D] Added explicit pool arrival / departure notification events (instead of VDS notifications). .834 * Added additional synchronization with StableBit CloudDrive .914+ on service start. .833 * [Issue #27582] Remember and restore the main window's startup position. .832 * [Issue #27602] Added the concept of an invalid file placement rule. - If a custom file placement rule no longer has any of its disks checked, then it's considered invalid. - Invalid rules will be marked with a red file placement icon and an exclamation mark on the file placement's rules tab. An appropriate tooltip will be shown as well. - Invalid rules have no effect on file placement. - Folder rules can never be invalid (they will be automatically cleaned up as before). .831 * [D] [Issue #27617] Added support for the undocumented FileDispositionInformationEx (used by Linux). .830 * [D] [Issue #27600] Fixed opt-in for no-execute (NX) non-paged pool. .829 * Reduced UI CPU usage. .828 * [D] Fixed access denied error with cloud pools. .827 * [D] Pools that were unmounted were not immediately delisting their data structures if there were handles open to the volume or file system. * Added the list-pools command to dpcmd. This will list all of the mounted pools. * Implemented local error reporting for the UI. Error reports will be saved to: %PROGRAMDATA%\StableBit DrivePool\UI\ErrorReports * Added the force-close-open-files command to dpcmd. This lets you force close open files on a pool (or pool part). * Added the list-open-files command to dpcmd. - This is capable of listing all of the open files and file parts on all of the pools, and their associated processes and PIDs (when applicable). - Open files that have had all of their pool part handles closed will be marked with an [X]. - Open files that don't have an associated open handle (e.g. memory mapped files, files open by the kernel cache manager) can be optionally listed and will be marked with a [M]. - Open alternate data streams will be listed with a [S]. * Changes to dpcmd's check-pool-fileparts: - File part and directory part summary statistics will now be listed by pool part UID. - Information about named alternate data streams will now be listed in the output and in the summary statistics. .823 * [D] When read striping is disabled, and multiple file parts are available, avoid choosing cloud drives and cloud pools. * [D] Added the concept of a cloud pool. A cloud pool is a StableBit DrivePool pool that consists entirely of StableBit CloudDrive drives. Such pools are treated like cloud drives when deciding which disks to read from. Cloud pools will be marked in disk tooltips. .822 * Refactored VDS out of the pool synchronization process. The service no longer needs to query every volume in the system when looking for pools. .821 * Force UI updates at critical points, even if the service is busy. * Measuring status was not being reported consistently. .819 * [D] Save measurement data on pre-shutdown. * [D] Do not allow remeasure after StableBit CloudDrive pre-shutdown. * [D] Wait for all of the pools to finish mounting their file systems on service start. .812 * Duplication tag repair code is now aware of pool part tags. * [D] Pool part duplication tags are now associated with a particular pool. .811 * [D] When a pool is storing part of the contents of another parent pool, you can now set folder duplication and file placement rules in the child pool, on the partial contents of the parent pool. These rules are separate and different from the parent pool's file duplication and file placement rules. - E.g. If HybridPool consists of CloudPool and LocalPool, where CloudPool is a pool of multiple cloud drives, and LocalPool is a pool of local disks, you can *selectively* duplicate the contents of HybridPool that is stored on LocalPool over multiple local disks. On LocalPool, you can now set the duplication of the "\Pictures" contents of HybridPool to x3, while the "\Videos" contents of HybridPool to x2. While on CloudPool, you can make different duplication and file placement choices of the "\Pictures" and "\Videos" contents of HybridPool. .810 * Resolving and repairing duplication tag conflicts was not working for read-only folders (such as .covefs). .809 * Do not check duplication tag consistency under PoolPart folders that are on the pool (the parent pool is responsible for that). .808 * Always show other pools in the folder duplication window, even when show hidden folders is unchecked. .807 * [D] Fixed STATUS_PRIVILEGE_NOT_HELD when adding a disk to the pool. .806 * [Issue #27597] Fixed some dpcmd commands that weren't working (e.g. ignore-poolpart, unignore-poolpart). .805 * [D] [Issue #27596] Fast I/O MDL reads now work with read striping enabled. .804 * Additional miscellaneous UI responsiveness fixes. .803 * [D] [Issue #27580] Added Fast I/O support for MDL reads. .802 * [Issue #27587] Fixed verify after copy. .801 * [D] [Issue #27586] Persist the CoveFs_ReportAs... settings to registry and apply at boot time. * Improved Add / Remove action UI responsiveness. .800 * Setting file placement rules should only affect the file placement clean state of that pool. * Do not run background duplication or balancing when other pools in the same pooling hierarchy are doing so at the same time. .799 * [D] Fixed some PoolPart arrival / departure timing issues having to do with hierarchical pooling. * [D] You can now enable folder duplication on the partial contents (PoolPart) of a pool. - E.g. If OmniPool consists of CloudPool and LocalPool, where CloudPool is a pool of multiple cloud drives, and LocalPool is a pool of local disks, you can duplicate the contents of OmniPool that is stored on LocalPool over multiple local disks. * The service would not start if there were pattern limits set on a missing disk. .798 * [D] Added coordination between StableBit CloudDrive (.900 and newer) and StableBit DrivePool (.798 and newer) in order to ensure that any cloud drives part of the pool don't cause missing disk warnings, incomplete file warnings, unnecessary remeasures, and unnecessary duplication passes after a reboot. * Fixed reboot requirement after upgrade. * When the StableBit CloudDrive service is starting, wait for it to finish starting. .781 * Fixed disabling pool duplication on a pool that is part of another pool. .780 * [D] [Issue #27573] When background duplication needs to regenerate a file, first prefer to use a local drive as the source, then another pool, and finally a cloud drive, if nothing else is available. .779 * Advanced application settings are now stored in %PROGRAMDATA%\StableBit DrivePool\Service\Settings.json: - Each setting has a "Default" and "Override" values. - When "Override" is set to null, the "Default" value will apply. - Set "Override" to some value other than null in order to override the default. - Setting changes are applied instantly, but some settings may require a service restart or a reboot in order to go into effect. - The old DrivePool.Service.exe.default.config is no longer required. - If you've specified settings by creating a DrivePool.Service.exe.config, those will continue to work and will automatically propagate to Settings.json as "Default" settings. It is recommended to remove DrivePool.Service.exe.config and apply all of the custom settings as "Override" values in Settings.json, but it's not required. .777 * Added the service log to the troubleshooting menu. .776 * [D] Cloud drives are now marked in the disk tooltips and when identifying missing disks. * Fixed various UI quirks and optimized things. * Added built-in performance profiling to the UI (hit 'P' to activate in BETA builds). .775 * Show the exact amount of free space on the pie chart. * The task priority increase button should be synchronized with the task's state. .774 * After removing a missing disk, check for meaningless pattern limits and invalidate measurement data. .773 * Bug fixes and usability tweaks to the file placement UI. .772 * Got rid of the troubleshooting start menu shortcuts. Use DrivePool.UI.exe /? for command line options. * Reorganized the Pool / Settings menus. * The Troubleshooting menu is now always visible. * [Issue #17740] Added verify after copy to the Troubleshooting menu (it will default to DrivePool_VerifyAfterCopy). .770 * [Issue #19772] File backed virtual drives cannot be added to the pool. .769 * [Issue #27220] After removing a missing disk, a duplication error on the ".covefs" metadata folder might have been shown. * [D] [Issue #27553] Fixed reparse processing when the filename contained a trailing backslash. .767 * [D] Fixed system crash on drive removal. .766 * [Issue #17688] Missing disk notifications were showing up for offline pools. .765 * [D] [Issue #27540] Fixed memory leak introduced in .757. .764 * [D] [Issue #27212] Do not allow applications to set encryption when EFS is disabled (CoveFs_EfsEnabled). * Never allow the service to launch multiple times. .762 * [D] [Issue #25953] Upgraded reparse point storage format to V3. Older reparse points will still load. * [D] [Issue #25953] Added support for all types of reparse points (including non-Microsoft). * [D] [Issue #25953] Updated how reparse points are processed in order to fix remote to local symlinks. .760 * [D] [Issue #25961] When "file placement rules respect real-time file placement limits set by the balancing plug-ins" was not checked, and a new file was being created on a pool part with a protected or unprotected real-time placement limit set, the permissible file placement rule would not override the restrictive real-time protected or unprotected rule. .759 * [Issue #25962] Do not allow multiple pools to exist in the store with the same Pool ID. * [Issue #25962] Do not allow multiple pool parts to exist in the store with the same UID. .757 * When a drive is being removed from the pool, and there are in use unduplicated files preventing the drive removal, a dialog will show exactly which files are in use and by which process. * [D] Fixed crash when cloning an exceptionally long path due to running out of stack space. * [D] Rewrote how drive removal works: - The pool no longer needs to go into a read-only mode when a drive is being removed from the pool. - Open duplicated files can continue to function normally, even if one of their file parts is on the drive that's being removed. - Open unduplicated files that reside on the drive that's being removed will need to be closed in order for drive removal to complete successfully. An option to automatically force close existing unduplicated files is now available on the drive removal dialog. When not enabled, the service will move everything that's not in use before aborting drive removal. * [D] Added the ability to close handles on the pool, either by file name, pool part, or a combination of those. * [D] Added reference counting and locking to open contexts. * [D] Kernel code in common with StableBit CloudDrive is now shared with StableBit DrivePool. * [D] Ported file system to C++. .754 * When there were > 100 file duplication errors, the UI would not connect to the service properly. .753 * [D] [Issue #27155] Avoid using cloud drives when read striping, except when all of the available file parts are on cloud drives. .752 * [Issue #27352] There was a small chance that "Sequence contains no elements" would be raised when duplicating files in the background. .751 * [Issue #27353] For file placement rules, when never placing files on a pool part, use a maximum ulong for the pattern limit instead of the volume size. .750 * Updated to VS 2017 and WiX 3.11. .748 * [Issue #27481] Added file system tags to disk tooltips and the pool pie chart. * [Issue #27481] Added additional .config settings for file system reporting: - CoveFs_ReportAsNtfs (not new) - Always reports as NTFS. - CoveFs_ReportAsRefs - Always reports as ReFS. - CoveFs_ReportAsPoolPartFileSystem (default) - Reports as the file system of the pool parts. If CoveFs_AllowMixedFilesystems is enabled and the pool consists of mixed file systems, then it will report as "CoveFS". - If none of the above are enabled, will report as "CoveFS". * [D] [Issue #27481] The pool will now report the file system of the pool parts (ReFS vs NTFS). .747 * [D] [Issue #27464] Do not process SetFile and QueryFile where FileInformationClass >= FileMaximumInformation. .746 * [D] [Issue #27438] The multiple duplication tag was sometimes not being written to the pool part root folder. This was CoveFS 2 behavior and worked correctly as far as duplicating files, but it was causing the multiple tag cleanup routine to never run, even on new pools. The multiple tag cleanup code simply removes redundant duplication tags that are no longer necessary. To cleanup your multiple tags, just change any duplication setting anywhere on the pool once. * [D] [Issue #27438] Fixed "access denied" error setting folder duplication after build .744. .745 * [D] [Issue #27425] Opt in for no-execute (NX) non-paged pool. .744 * [D] Added hierarchical pooling support: - Pools are now made up of either disks or other pools. - Each pool handles its own separate folder duplication settings. - Balancing can work over a pool part, but file placement settings are limited to the entire pool part only. - Circular pooling is not allowed (e.g. Pool A -> Pool B AND Pool B -> Pool A). Contrary to popular belief, this does not lead to infinite disk space. .742 * [Issue #27399] The balancing "not more often than" setting is now more granular. .741 * [D] [Issue #27389] Windows 10 is sending us a query for "FileIdInformation", even though it's not supposed to (according to MSDN and the SDK). Handle it. .740 * [Issue #27333] Ensure that balancing works with file times that are at their maximum value of 0x7fffffffffffffff (year 30828). .739 * [D] Fixed access denied on drive removal. .738 * [Issue #27298] Fixed email sending. .737 * [D] [Issue #27226] Multiple reparse point fixes: - When a reparse point could not be persisted to disk, there was a chance of memory corruption. - Renaming a directory that contained one or more reparse points under it, or in its sub-directories, would cause those reparse points to get lost. - Opening a reparse point directly and querying for information about that reparse point would not return reparse-based information if Fast I/O was enabled (i.e. it would look like a regular file). This led to some strange behavior, such as when copying a reparse point, a 0 byte file would be created. .736 * [Issue #27285] Added to dpcmd the ability to work with pools which are mounted through a symbolic link. .735 * Fixed the NT API calling convention. .734 * Do not report missing disks for pools that are completely disconnected. .733 * Tweaked the UI for the Essentials Dashboard. .727 * [D] Fixed pool lockup on rename or delete while measuring. .723 * A reboot should not be required after performing a clean installation on Windows 10 / Server 2016. - msiexec on Windows 10 is not marked for Windows 10 compatibility and therefore runs in Windows 8.1 compatibility mode. - Therefore, *all* MSI installers that attempt to detect the current Windows version (in InstallFinalize) will detect Windows 8.1 and might end up installing files that were meant for Windows 8.1. - Fortunately, after the installer finished, our service was smart enough to detect the incorrect drivers installed and was fixing the problem by replacing them with the correct files for Windows 10. This is what was causing the extra reboot after a clean install, and this reboot will no longer happen. .722 * Fixed unusable for duplication calculation. * Fixed inactive border color on Windows 10 / Windows Server 2016. .721 * [D] Measuring can now be boosted in priority from the pool organization bar. The same priority rules apply here as the rules that apply to the CoveFs_MeasureBackgroundTaskPriority advanced setting, except priority changes happen in real-time and no reboot is required. * [D] Measure each pool part individually and do not adjust the file sizes of other measured pool parts. * [D] When measuring the pool, a tooltip over the pool organization bar will now show which pool part is currently being measured and which directory. * [D] Added additional locks to the measuring pass to prevent file creation / overwriting while a directory is being enumerated and measured. * [D] Do not attempt to measure file allocation sizes for statistics and balancing purposes. - File allocation sizes cannot be accurately measured in real-time under all circumstances. File compression, deduplication and potentially other technologies are able to modify the file allocation sizes on the underlying volume in the background. Without any way of subscribing to get notified about these types of changes, there is no way to determine whether the recorded file allocation size at end of I/O time is still accurate later. - For balancing purposes, in order to maintain the accuracy of the balancing rules, always use the file sizes sum to compute the balancing model and to determine the balancing ratio, and never correct them to reflect the actual used space on the volume. - If the measured sum of all file sizes exceeds the total used space on the volume, as reported by the file system, always consider the measured sum of all files to be authoritative. The measured sum of all files together with the volume free space, as reported by the file system, will constitute the pseudo-capacity of the volume. For balancing purposes, this pseudo-capacity can be greater than the actual volume capacity when compressed or sparse files are present on the volume. - When the pseudo-capacity is greater than the actual volume capacity, it will be noted so in the tooltip that appears over any such pooled drive. - The pseudo-capacity is used to draw the statistics graphics, but it is not directly shown anywhere in the UI. - A remeasure will be forced after upgrading to this build. .711 * [D] Fixed a deadlock when one or more cloud drives (from StableBit CloudDrive) are storing their data on one pool, and those drives are then used to create another pool. - Modified the pool part locking model to accommodate this usage scenario. - Each pool now uses its own thread pool for finding files in pool parts (CoveFs_AsyncFindFilesThreads). - Reduced the shared critical thread pool to 2 threads (CoveFs_AsyncFindFilesThreads). .708 * [D] Added additional locks to the measuring pass to prevent directory changes while enumeration is taking place. * Added an advanced setting to turn off background task priority for the measuring pass (CoveFs_MeasureBackgroundTaskPriority). - When disabled, the kernel measuring thread will run at normal thread priority and normal I/O priority. Finding files on pool parts for measuring will run in parallel at time critical priority. - When enabled (default), the kernel measuring thread will run at DrivePool_BackgroundTasksPriority priority (defaults to lowest) and very low I/O priority. Finding files on pool parts for measuring will not run in parallel (single threaded) and will use idle thread priority. - A change to this setting requires a service restart and a reboot (or 2 reboots) to apply. .705 * Added advanced setting to allow mixed ReFS / NTFS drives part of the same pool (CoveFs_AllowMixedFilesystems). .704 * The file mover and the file pattern mover will now work with file allocation sizes when computing move sets. * The volume equalization balancing algorithm was not equalizing protected files properly and sometimes it was computing incorrect unprotected file deltas. .703 * After performing any pool management tasks (e.g. change duplication, add / remove drive), the balancing ratio and balancing state would not update until the service was restarted. .702 * If a folder on the pool could not be duplicated by the background duplication pass, and on a subsequent pass that folder is deleted, do not error out with a path not found error. * When finding the common path prefix for a duplication pass after one or more warnings, do not consider the file name as part of the search. .701 * [D] Do not allow mixing of ReFS and NTFS volumes in the same pool (unless they are already mixed). * When formatting a new drive, let VDS choose the correct bytes per cluster instead of using 4096. .699 * [D] Measurement pass was failing when encountering a reparse point in a pool part. * [D] Added additional details to user feedback for failed measuring attempts (pool part, file path, error code and error message). * Added CRT 2013 / 2015 dependency and CoveUnmanaged in order to access the NT API directly, bypassing Win32. .696 * Applied Windows 10 UI tweaks to child windows like folder duplication, remove options, etc... .695 * [D] Measuring pass would not correctly measure files with > 2 file parts (forced remeasure). * [D] Querying for a file ID on the root directory would incorrectly modify the file name to be blank. Subsequently, opening another handle to the root directory using a related file object (with the previously modified file name) and a blank file name would incorrectly result in trying to open a blank file name. This would end up raising an invalid parameter error. * [D] Fixed processing create with "\\" as the path. .693 * Fixed persisting balancing settings. * Added volume statistics to "dpcmd list-poolparts". .692 * [D] File size tracking updates: - Reworked the file size tracking algorithm to update file size statistics whenever a file handle is closed. Previously it would only update statistics when the last file handle was closed. - Fixed numerous issues having to do with file size tracking and measuring. - In order to better synchronize the presentation of statistics in the UI, the pool part free space and total size are now retrieved directly from the kernel at the same time as the file size statistics. This only happens when the UI is running in order to conserve system resources. * Added the ability to display exact file size statistics to "dpcmd list-poolparts". * [D] Use FASTIO_QUERY_OPEN to determine whether a file exists on a pool part. This is faster than sending an IRP and should be more reliable. In some cases we were sending 3 IRPs when querying for information about a file on a pool part. This accomplishes the same thing but uses Fast I/O instead (0 IRPs sent). .689 * Fixed the ability to install into a non-default folder (INSTALLLOCATION property passed to MSI now overrides the default). .686 * Fixed numerous issues with remote control. - The list of computers used to lose systems periodically, leading to one way visibility between two systems. This was due to DNS lag. - Reduced chatter between systems. - Adjusted keep-alive retries for busy networks. - Remote control cannot be turned off when connected to a remote system. .685 * Added JSON serializer/deserializer to the Store for faster service startup times. .684 * [D] Added FILE_SYNCHRONOUS_IO_NONALERT to directory opens. These are used to enumerate folders when reading the duplication count, processing file pattern limits, and processing reparse points. * Enabling duplication on file names > around 200 characters would not work. File names on NTFS are limited to 255 characters, but because we were generating the temporary file name used for background duplication based on the existing file name, it could potentially exceed that limit. This will never happen now. File names on the pool can now be at their maximum 255 character limit. .683 * [D] [Issue #27165] When a useless (redundant) call buffer came back from a directory listing, it was not being reissued. This created a small opportunity for a directory listing to stop prematurely. This did not affect non-duplicated folders. .682 * Allow manual rebalancing when the balancing ratio falls below 1.0 (not 0.99). .681 * Fixed deadlock in performance sampler that was causing the service to lock up. .680 * [D] Accessing any existing files directly under a folder with a "multiple" duplication tag would show the error "File not found" (or STATUS_OBJECT_PATH_NOT_FOUND). Copying new files into such a folder would not work. .679 * [D] [Issue #27103] Do not force IRP_NOCACHE on read. .678 * [D] Do now allow IRP_MJ_READ / IRP_MN_MDL with IRP_NOCACHE. .677 * [D] [Issue #27084] When driver verifier is enabled for covefs.sys, display a user feedback warning. Inform the user that having driver verifier enabled will degrade pool performance. .676 * [D] [Issue #27052] Fixed compatibility issue with Symantec's Windows 2000 legacy file system filter driver (PGPfsfd.sys). .673 * [Issue #25989] Added Wpf_SoftwareOnlyRendering option to the UI .config to force software rendering of the UI. .672 * [D] [Issue #20851] Very rarely, a pool part folder is reported to not exist, while a sub-folder under that folder does exist. This causes duplication inheritance to get confused and to inherit the wrong value from the root. This issue was reported on Windows 7 and WHS 2011. It could not be reproduced. * Added reset-duplication-cache command to dpcmd. .669 * Added "duplicationLevel" parameter to dpcmd's "check-pool-fileparts". .668 * When a file was renamed on the pool, with the intention to overwrite another file, the size of the file being overwritten was not subtracted from the file size tracking statistics. .665 * Updated code signing certificate to SHA-256. .663 * Got rid of some unnecessary user feedback messages. Only show them on a failure. .662 * [D] Report measurement failures to user, including pool part that failed measuring and the path. * Implemented user feedback, similar to StableBit CloudDrive. * [D] Remeasuring should clear measure failed flag on pool part. .660 * [Issue #22900] Pooled drive tooltip pie chart would not be consistent with size bars sometimes. * [Issue #22900] Fixed disk tooltip text getting cut off. * Do not calculate the balance ratio more often than every 30 seconds, regardless of how much I/O the pool is seeing. * [Issue #22900] Pooled drive size bars could exceed drive size. * [Issue #22901] Do not write out error reports if BitLocker monitoring fails to start. .659 * Added usage information and examples for set-duplication-recursive. * Added check-pool-fileparts to dpcmd.exe. It's able audit your duplicated files and find inconsistencies. - For usage and examples: "dpcmd check-pool-fileparts" .655 * [Issue #21848] Rewrote dpcmd.exe to accommodate for a more structured command module layout and added a bunch of new commands (requires command prompt with Administrative rights). - Added: - ignore-poolpart - Immediately disconnects a pool part from the pool and prevents it from participating in future pools by placing an ignore tag on it. - refresh-all-poolparts - Forces the reenumeration of all the pool parts and pools. - remeasure-pool - Recomputes a pool's file usage statistics. - set-duplication-recursive - Recursively sets the duplication count on one or more folders on the pool matching a pattern (regex or file pattern). - unignore-poolpart - Removes the ignore tag from a pool part, and readds it to the pool. .653 * [D] [Issue #21842] Roll back the change to fix request throttling crash on x86, simply avoid running that code on x86. .652 * [D] [Issue #20856] Added MDL read optimization for protected files. 2.2.0.651 --------- .651 * Fixed service crash when last disk in a pool was removed. .650 * [D] Added ReFS support on Windows 8.1 and newer (or Windows Server 2012 R2 and newer). .649 * [D] [Issue #20787] Use QPC to measure the speed of read I/O for read striping purposes. * [D] [Issue #20787] Fixed a bug calculating read I/O transfer speed, for the purposes of read striping. .640 * Added FileBalance_RetryOnUnmovable advanced setting. A balancing run will be allowed to run, even when the exact same model has run in the past, if in the past, there were unmovable files. This is enabled by default. - Automatic retries will happen at most every 5 minutes, if "Balance immediately" is selected and "Not more often than every ..." is unchecked. - Otherwise, retries will be subject to your balancing trigger settings. * [D] Fixed real-time measuring issue. When a new file was created, and its allocation size was > 0, we would record an incorrect allocation size for that file. This was introduced in build 633 with a fix for Issue #16694. The result of this was "other" space on the pool would be reported greater than it actually was. .639 * [Issue #18754] Measurement inconsistencies will now be reported in the pool disk tooltips (labeled as "corrected"). * [Issue #18754] Disable automatic remeasuring upon encountering a measurement inconsistency. .637 * Fixed a locking issue in the task queuing code that was causing a service crash. * [Issue #18768] When the first pool part in a pool was unlocked using BitLocker, the pool parts were not refreshed. * [Issue #18768] Enabled BitLocker_PoolPartUnlockDetect by default. .636 * [D] Windows 10 support. - Created new driver binary targeting Windows 10. - Recompiled everything using Visual Studio 2015. - Implemented alternate window management code for UI glitch in Windows 10 that leaves 7 unusable pixels at the top of a border-less window. - Modified code to enabled DWM animations. * Updated WiX Toolset to 3.10 RC. * Licensing fixes. .634 * [D] [Issue #17716] Added per-file filter context support. * [D] [Issue #17716] Per-stream filter context reference counting was not working correctly. This prevented file system filter drivers (e.g. A/V applications) from unloading properly. .633 * [D] [Issue #16694] Sparse files on the pool were not being measured correctly. .632 * [D] [Issue #15579] Issue #13504 introduced a race condition which can lead to a crash. .631 * [D] [Issue #17706] The fix for issue #15603 caused the pool ID to change, which lead to the pool drive letter changing and the pool settings being reset. .630 * [D] [Issue #15603] Added CoveFs_IsDiskRemovable advanced setting. This controls whether pool drives show up as removable disks. It defaults to False and takes effect after a reboot. Previously, all pools were removable disks. * [Issue #17695] Do not prevent drive removal from proceeding if the Server service is not running. * [D] [Issue #16674] When renaming a file, if the target of a rename is another folder, then issue delete / create notifications, not rename old / rename new. * [D] [Issue #17685] Added CoveFs_SortedDirectoryQueries advanced setting. Enabling this option will pre-buffer and pre-sort all directory enumerations in the kernel. This has a major negative impact on directory enumeration performance and should only be enabled if directory enumerations must come back in a sorted order (normally the application performing the enumeration will sort the output for you). * [D] [Issue #16689] When the target of a complex rename had a backslash at the end, the rename would fail. * [D] [Issue #15604] Make the emulated physical disk read-only in order to prevent malicious software from overwriting it causing the pool to become inaccessible. * [D] [Issue #15581] Use the requestor thread context when forwarding I/O requests. * [D] [Issue #15572] Fixed crash on reparse point creation. * [Issue #15558] When "If the balance ratio falls below" is set to 100%, a balancing run will always be scheduled, if at least one byte needs to be moved on the pool. Previously it used floating point math to calculate when a balancing run should begin, which can be imprecise when dealing with large numbers. * [D] Fixed updating issue having to do with certificates (rebuilt the disk driver). * [Issue #14546] The Dashboard add-in now runs in a separate AppDomain, fixing any potential future DLL conflicts with other add-ins. * [Issue #14517] Demoted the calculate balance ratio task to a new category of "idle" tasks that only run when no other tasks are running and no UI tasks are running. * [Issue #14574] Fixed repairing duplication tags on read-only folders, such as the .covefs hidden metadata folder. * [D] [Issue #13472] The file system dirty bit was not being reported correctly, potentially causing tools that query the health of the file system to incorrectly report that it's not healthy. * [D] [Issue #13513] When in troubleshooting mode, the ".covefs" special metadata folder will be visible on the pool for troubleshooting purposes. * [Issue #13517] When the "dedup" file system filter is installed, "Bypass file system filters" is overridden and disabled. This allows pooled drives that are utilizing data deduplication to work correctly with StableBit DrivePool. * [Issue #13517] Added a new "Bypass file system filters" per-pool option under Pool Options -> Performance. This promotes the advanced setting "CoveFs_BypassNtfsFilters" into a UI option. The advanced setting still exists and serves as a default for new pools and pools that did not have the UI option previously. See the tooltip for an explanation on what it does. This is now a real-time option that is enabled / disabled in the file system at the instant that you check it or uncheck it. At boot time the setting is preserved and loaded at the file system level before any system services are started. The setting is enabled by default. * [Issue #14517] Moved the calculate balance ratio task down the priority hierarchy so that it doesn't interrupt UI background tasks (such as calculating folder sizes). * [Issue #14538] Changed the tone of the text in the licensing window. * [D] [Issue #14542] Fixed file change notifications vs. folder change notifications. * [D] [Issue #14519] xcopy / robocopy did not work when using the pool root directory as the source due to alternate streams that exist on that directory. * [D] Updated code signing certificate. * [D] [Issue #14527] Fixed file modification notifications. * [Issue #13499] Limit the number of duplication errors reported after a drive removal to 100. A duplication pass will report more if necessary. * [D] [Issue #13504] Optimized some spin lock code that was causing a DPC_WATCHDOG_VIOLATION on Windows 8+. * Added native compilation (NGEN) for faster startup times for the UI and Service. * [Issue #13493] Added a new troubleshooting mode to the UI called "force TCP". This will force the UI to communicate with the service via. TCP instead of IPC. (command line: /ForceLocalTcp /ForceLocalTcpPort=N) * [Issue #13493] Removed the troubleshooting menu. It can be enabled from the new "Troubleshooting" folder in the start menu. (command line: /TroubleshootingMode) * [D] [Issue #13467] Fixed a bug in the volume label retrieving code, when there is no label set on a pool drive. * [Issue #13476] Do not take a UI lock when updating the volume free space. * Fixed an issue where the license would get into a "transfer needed" state, where a transfer was not needed and would not exit this state until a restart. * Added /LaunchUI=0 option to the EXE installer and the LAUNCHUI=0 property can be set on the MSI to avoid the initial UI launch. This is useful for managed deployments. * [D] [Issue #13437] On x86 systems, in-flight request throttling was causing sporadic system crashes. * [D] [Issue #13443] When a folder delete fails because of files in one pool part folder, roll back the delete on any other pool parts. * [D] [Issue #13432] Fixed potential crash in the file size tracking code. * [Issue #12411] The CoveFS metadata folder is now shown in the per folder duplication settings window and the file placement tab under balancing. The metadata folder is automatically duplicated up to x3 on the pool. * [Issue #12412] Fixed UI list issues introduced in recent BETA. * [Issue #12409] Activation ID text can now be mangled. * [D] [Issue #12398] Added trace code instrumentation over the kernel file size tracking code. * Signed all binaries with Covecube Inc. Authenticode certificate in hopes of preventing false positive A/V warnings. * [Issue #12385] Saving file placement rules on one pool would clear file placement rules from all the other pools. * [Issue #6316] Added DrivePool_BackgroundTasksPreventSleep advanced .config option. * [D] [Issue #8332] When a disk went missing from any pool, all the pools were unnecessarily remeasured. * [Issue #7335] Added SMTP support for sending email notifications. See: http://wiki.covecube.com/StableBit_DrivePool_2.x_Advanced_Settings * [D] [Issue #6266] Rewrote exception handlers in completion routines that handle in flight counts. * [Issue #4220] Do not consider disconnected pools when determining which disks are available to be added to the pool. * [D] [Issue #3202] Fixed avast (and possibly other A/Vs) getting stuck for 30s on creating a new pool. * Added community RU translation (thank you guys). Release ======= 2.1.1.561 --------- * Added automatic license migration from 1.X -> 2.X when installing 2.X for the first time. 2.1.0.558 --------- * Unnecessary error reports were being generated after the last pooled drive was removed. * Logging in as a different user when remote controlling was not working. * [D] [Issue #5222] Added support for FileFsSectorSizeInformation. RC == 2.1.0.553 --------- * Release candidate. BETA ==== 2.1.0.552 --------- * [D] Fixed a real-time file size tracking inconsistency that would cause the pooled file size to drift upwards when files were overwritten (FILE_SUPERSEDE, FILE_OVERWRITE, FILE_OVERWRITE_IF). Existing pools will be remeasured automatically. * Added new .config option FileSizeTracking_UpdateSizeIntervalS to the service, mainly for testing purposes. * Finalized all translations. * The .covefs meta-data folder now doesn't show up in duplication / file placement. * Do not write out error reports when operations are canceled. * [D] [Issue #3204] Fixed renaming in a folder that's a reparse point. * [Issue #1146] Added test email option after entering email addresses for notifications. * Windows will now save their maximize state in addition to their size. * Added minimize / maximize buttons to the horizontal UI. * Cap WPF animations to 30 FPS on WSS. * [Issue #47] Refactored licensing code to prevent the licensing request from showing up unnecessarily. * [Issue #2158] Fixed the performance pane turning off on slower systems, even while it's still open. * Increased default performance sample interval to 2 seconds. * [Issue #3198] Fixed spelling mistake on the change duplication dialog. * Added a tooltip over the balancing plug-ins to show the version of the plug-in and the creation time (if external). * [Issue #3192] Added VDS as a service dependency to the StableBit DrivePool service. This improves system and service startup time. * [Issue #114] When the System Volume Information folder doesn't have the inherit flag set on the SYSTEM permission, drive removal would error out with "Access denied". * [Issue #2188] Refactored the disk enumeration code to not error out when a disk or volume is encountered which has the same persistent key as one that we already know about. Detailed trace data will be written out to the log file when this happens and disk enumeration will continue. * [Issue #3190] Added DrivePool_RunningFile .config setting. When specified, a file at this path will be created whenever a background task is running, such as balancing, background file duplication or measuring. After all background tasks end, this file will be deleted. 2.1.0.528 --------- * [D] Fixed creation of empty "PoolPart..." files on drive removal (harmless but annoying). * [Issue #2165] Meaningless folder placement rules are now defined as rules that are set up exactly the same way as the immediate ancestor rule. These rules will be automatically removed. With this change a rule with all the drives checked can now be "meaningful" as long as it has a different immediate ancestor rule. This allows you to effectively "override" and disable an ancestor folder placement rule on one or more specific child folders. * [Issue #2165] Changed folder placement icon to a green filter icon when a folder placement rule is defined on a folder. The icon will turn black (and shrink) if a folder is "inheriting" a folder placement rule from an ancestor. * When removing a drive from the pool, and one or more empty directories can't be deleted because something has a handle open to them (like SMB), schedule a directory deletion on reboot. * Disks list will now update more smoothly. * Fixed disk tooltip disappearing issue over pooled disks. * [D] When renaming a file violates a file placement limit, the service will be notified by the file system in real-time. * [D] Fixed a crash when a new file is created and a measuring pass just started, before the first directory is enumerated. * [Issue #2165] Added disk tooltips over the file placement disk list. * [Issue #2187] File placement rules were not being saved if the only thing that changed about them was the order. * [Issue #2165] For a new folder based file placement rule, the UI will now base the rule off of the parent folder's rule. A new rule will only be created for the sub folder if it differs from the parent rule. * [Issue #2166] Fixed emptying protected disks. * [Issue #2165] "Balance immediately" wasn't taking file placement rules into account. * [Issue #2165] Meaningless rules will now be saved, if they are pattern based (not folder based). * [Issue #2165] Added multi-select support for file placement rules (hold down Ctrl or Shift to select multiple rules). * [Issue #2165] Folder based rules can now be rearranged, as long as the new arrangement doesn't violate the path depth rules. Folder rules defined on deeper directory structures must always have a higher priority than folder rules defined on shallower directory structures. The depth of a folder rule is defined as the number of "\" characters. * [Issue #2165] File placement rules now have an option that automatically excludes new drives from being selected for that rule. * [Issue #2165] Automatically prioritize file placement rules if any exist from previous builds with no priority. Also force a rebalance using the new priority based rules. * Added drag and drop to the ordered lists in the balancing window. * [Issue #2165] When file parts need to be cleaned up due to duplication changes, file parts that are violating placement rules are cleaned up first. * [D] [Issue #2165] File placement rules now have a priority associated with each rule. Whenever a file path matches multiple patterns, the rule with the highest priority is applied. - Folder based file placement rules have a priority automatically assigned to them. Folders that are deeper have a higher priority. - Manually defined pattern based file placement rules can now be moved up and down the list to define their priority. Rules at the top have higher priority than rules at the bottom. * [Issue #2173] Added new "Increase priority" toggle button that will become visible in the pool organization bar. When toggled on the currently running task will be boosted in CPU and Background I/O priority. * Added new .config settings DrivePool_BackgroundTasksPriority. This controls the CPU thread priority for background tasks such as calculating the balancing ratio. Valid settings are -15 to 15 (inclusive). Default is -2. * A task could have taken on the thread priority / background I/O settings of another task in the same task group if the tasks were in the same queue. Each task now consistently sets its own background I/O and thread priority. * "Balancing plug-ins respect file placement rules" was not working correctly. * Fixed measurement inconsistency when removing a disk with duplicated files. * Fixed checking for duplication consistency of the .covefs meta-data folder after implicit duplication count change. * When duplication state was "Unknown" there was no option to start a manual duplication pass in the UI. The pool organization bar will now reflect this. * [Issue #2173] Pool organization progress percent will now move more smoothly when moving large files while rebalancing and removing drives. * [Issue #2173] Tasks such as rebalancing and file duplication can now be aborted from the pool organization bar. * [Issue #2151] Added "Reset all settings" menu options under Settings -> Troubleshooting. This will reset all Store meta-data in the service. * [Issue #2151] All concurrent tasks now write out error reports on failure. 2.1.0.503 --------- * [D] Fixed x86 disk driver installer. * [D] When removing the last limit on a pool part, the file system was not notified and that limit remained. * If an Exception was raised in a delayed action during cancellation, a deadlock was possible, thus stalling service shutdown. * Initial balancing settings will now default to balance immediately, but not more often than every 12 hours. * Fixed critical balance bytes default in the initial balancing settings. * [Issue #2165] Added warning strip to the file placement tab when balancing rules are not being satisfied due to low disk space or other conflicting rules. * [Issue #2165] Added bar chart that shows file distribution per pool part when a folder is selected. * [Issue #2165] Added folder size pie chart to file placement folder tree. * [D] When the file system detects that a pattern limit has been violated, inform the service. The service will set a flag and it will be reported in the pool organization bar. * When performing background duplication or drive removal, try to respect file placement limits: - When looking for destination pool parts in order to duplicate a file part, prefer pool parts that don't violate existing file placement limits for that file. - If a file placement limit must be violated, then reflect that in the balance state, which will be reflected in the pool organization bar. * Drive removal progress percent was not being reported correctly in the pool organization bar. * Drive removal no longer requires a remeasure after it completes. * [Issue #2166] When balancing and emptying a disk, added edge condition to fully empty the last remaining files even if that strictly violates the target pool part's balancing delta. For example, when one file is remaining on the source pool part and there are 2 target pool parts, that single file obviously can't be split up in 2. This ensures that file evacuation works as expected. * Added new balancing options to deal with Balancer <=> File placement interaction: See Pool Options -> Balancing... -> Settings - The file pattern mover should not violate real-time file placement limits set by the balancers. - The existing pool part file mover should not violate file placement pattern rules when moving files around. - Unless, the pool part is being emptied. * After successfully removing a pool part, check file placement limits to make sure that there are no limits that exclude all existing pool parts. If such limits exist, they are meaningless, remove them. * [Issue #91] Both measuring and a file consistency check is required, measure first then check consistency. Previously the file consistency check would take priority. This was causing user confusion. * Implemented a background file placement balancer: - When changing file placement rules, the "file placement balancing state" is marked dirty and a file placement background balancing run is needed to move the existing files on the pool in accordance with the file placement rules. This drops the balancing ratio to 0.0. - In the horizontal UI mode, if the file placement balancing state is dirty, a little file icon will be shown next to each pooled disk's balancing bar indicating that file placement balancing is required on this disk. - When the file placement balancer needs to move a file off of an existing pool part because it is violating the pre-set limit, it uses these rules when deciding which pool part to place the file on: - A pool part is chosen that doesn't violate other pattern based file placement limits and doesn't violate real-time file placement limits. - If no such pool parts exist, the file is not moved. - Protected files are never moved onto a pool part that resides on the same storage unit as another file part of the same file. This would break the file protection rules. * Added a folder based file placement rule configuration UI. See Pool Options -> Balancing... -> File Placement -> Folders: - Specifying a folder rule will automatically generate a pattern based rule for that folder. - The pattern for a folder based rule cannot be edited. - Folder based rules cannot be defined for the meta-data and root directories. - Only meaningful rules are saved. A rule with all drives selected is not meaningful. * [D] Added real-time pattern based file placement rules. See Pool Options -> Balancing... -> File Placement: - You can specify one or more rules that will direct matched new files to be put on one or more specific pool parts. - Patterns can include wild-cards (*, ?). - Given the wild-card support you can create patterns that are absolute such as "\Users\*" or relative "*.ISO". - Each rule can optionally overflow files onto deselected disks if all the chosen disks are getting full. - A non-overflowing rule will give an out of disk space message if all of the chosen disks are full for any file that matches that rule. - A simpler folder based interface will be added. * [Issue #2159] Each balancer has 30 seconds to calculate the balance ratio, if it takes longer than that then abort it. * [Issue #2159] Respect DrivePool_BackgroundTasksVeryLowPriority when calculating the balance ratio. Prior to this, calculating the balance ratio would always be performed using idle thread priority. * Fixed localizations for service and UI notifications. * Merged community translation changes. * [Issue #1160] Added community Bulgarian translation (thanks). * [Issue #122] When removing the third or second drive from the pool, StableBit DrivePool would generate false duplication warnings about the CoveFS metadata that indicated that you need to add another disk to the pool. * [D] [Issue #2157] Fixed exception handler in MDL creation function. * [D] [Issue #101] The context of a byte range lock request is not always the current thread. (E.g. Hyper-V) * [D] [Issue #101] FileObject->LockOperation seems to be inconsistent, switched to internal flag. * [D] [Issue #101] Byte range locks were not being released immediately on file close. Oddly, this is exactly the expected behavior according to MSDN (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365715): "If a process terminates with a portion of a file locked or closes a file that has outstanding locks, the locks are unlocked by the operating system. However, the time it takes for the operating system to unlock these locks depends upon available system resources." Unfortunately this was creating a number of issues. * [D] [Issue #121] Removing a drive from the pool which has a reparse point file part would fail. * [Issue #121] A failed drive removal would not show the failure error message. * [Issue #106] Added RemoteControl_MulticastGroupIp and RemoteControl_MulticastGroupPort to advanced settings. You can use these settings to change how remote control peer discovery is done, either for segregation purposes or to resolve IP / port conflicts. * Fixed error recognizing an additional pool created from the UI. * First pool welcome message was not being shown. Rewrote test logic, it was too complex and error prone. The first pool welcome message will be shown only after creating your first local pool from the UI. Creating a remote pool or having an existing pool will not trigger it. * [Issue #91] When denying balance ratio calculation, deny all queued instances as well. * [Issue #91] Added additional trace data when denying the calculation of the balance ratio due to the pool measure state. * [Issue #79] Added additional trace data for disk update notifications. * [Issue #81] Fixed burn EXE deployment. * [D] [Issue #74] When an oplock break possibility exists, wait for the first proxy call regardless of the returned status code. * [Issue #56] When a pool part goes missing, set the pool to read-only until the missing pool part is reconnected or is removed from the pool. * [Issue #65] Added a new advanced setting for overriding the default culture (DrivePool_CultureOverride). * [Issue #59] Pools can now be in an "offline" state and remain that way for 365 days. This means that when a pool is ejected or all of the pool parts that comprise a pool go missing, the pool's settings will not be lost. * The pool title in the UI was not updating consistently. * [D] [Issue #60] Allow safe ejection of the pool virtual drive (using the standard drive removal tray icon). * [Issue #60] Do not keep a handle open to the pool at all times. * Added .MSI creation to deployment script. * [D] [Issue #51] WSS storage service would not recognize the pool drives because the drives were reporting that they were virtual drives. This was causing all kinds of problems with the Dashboard. * [Issue #50] Changed how we delay file system access on metadata load to work around odd behavior by file system filter drivers causing a lock up on boot (observed with Avast). * [Issue #50] Simplified and reworked how we obtain the volume device name on mount. * [Issue #50] CoveFS on Windows 8.1 was not being updated to the 8.1 build. Windows 8.1 machines will need a reboot after installing this build. * [D] [Issue #35] Pool performance statistics were being reported for all the pools at once instead of for each pool individually. * Never balance the pool or calculate the balance ratio if the pool's measurement is incomplete. If the measurement gets into an incomplete state while balancing, abort the balancing run. Otherwise this could lead to perpetual balancing, as remeasurement is disabled while balancing. * Pooled / Non-Pooled disk counts were not being refreshed properly. * [D] Fixed the extraneous 30 second delay when creating a new pool. * Updated code signing certificate (2014). * [Issue #19] Fixed service crash on clean install introduced with the new boot time tracing. * [D] [Issue #13] Fixed race condition in work queue exiting causing potential lockup. Work queues are used when measuring the pool and in other places. * [Issue #9] Added option to enable / disable file system activity logging under Troubleshooting. * [Issue #9] Added option to enable boot time logging to the new "Troubleshooting" menu in the options drop down. Boot time logging will write CoveFS file system activity logs to %PROGRAMDATA%\StableBit DrivePool\Service\Logs\CoveFs. File system logs can be submitted to technical support for analysis. * [Issue #8] Added error reporting functionality to detect errors on store change events (e.g. StoreValue_ItemChangedWeak). * [D] Fixed querying for file IDs (this was causing issues with the NFS server). 2.1.0.432 --------- * CoveFS metadata (/.covefs) will be automatically duplicated, depending on the number of disks in the pool, up to 3 times. * [D] Reimplemented symbolic links (file / directory), junction points and mount points on the pool. (CoveFs_ReparsePointsEnabled in .config, enabled by default) - Reparse point metadata is now stored in a special hidden reparse metadata folder on the pool: /.covefs/reparse. This folder will not be enumerated on the pool but is used by CoveFS to manage reparse points. - The special NTFS specific \$Extend\$Reparse:$R:$INDEX_ALLOCATION file, for enumerating all of the reparse points on a volume is not supported yet. * Added disk index to the disk tooltips. * Added total disk count to disk lists. * Disk metadata updating with the Scanner was sometimes generating error reports if a disk was removed as we were querying for information about it. * [D] Finally figured out the workaround for the "Samsung magician" bug. Turns out that they don't like something about our disk name, perhaps it was too long and their app was crashing. I've reduced the name and the bug no longer manifests, but unfortunately due to how Plug and Play works in Windows this fix will only be effective for new pools. * [D] Added product / vendor / firmware codes to our virtual disks in an attempt to work around some kind of bug in the "Samsung magician" software, but attempts at a workaround have failed. * [D] Redefined our virtual disk enumerator into a SCSI Adapter in order to make it participate in WMI SCSI Controller enumeration. Release ======= 2.0.0.420 --------- * When saving remote credentials, if you entered the wrong credentials, you would not be able to bring up the credentials dialog again. RC == 2.0.0.417 --------- * The UI will no longer lock up if WMI is not responding when querying the Scanner for data. * [D] Fixed inconsistent read oplock breaking with read striping enabled over duplicated files. * [D] Fixed crash due to race condition when processing oplocks. * The first pool message was erroneously popping up sometimes after connecting to a peer. * The first remote control attempt would sometimes spontaneously switch you back to local mode. * Fixed a race condition in the IPC layer that was causing a UI crash. * When you are not authorized to connect to a remote peer, the computer name that you're connecting to is now shown in the message that prompts for credentials. * Sometimes when the remote peer was not authorized, "Connecting to service..." would be shown indefinitely, with no prompt to enter proper credentials. * When using remote control, clicking "Back to '...'" would not save the fact that you connected to the local service last. * When the Windows performance counters were corrupt, the UI was not able to connect to the service. * [D] Issuing a SetFileTime with 0xFFFFFFFF values would incorrectly report that a file has changed to anyone listening for file change notifications. In particular, this was causing an issue with NOD32 v6, where image files would get reloaded constantly using the Windows Picture Viewer. * Missing disk notifications were showing up even if the entire pool was disconnected. * Added DE, ES, FR, IT, PL localizations to Service and tray notifications and fixed some UI localizations. 2.0.0.400 --------- * Added DE, ES, FR, IT, PL localizations to UI. * When adding a RAW disk to the pool it would disappear from the disks list for a bit, which looked odd. * Pooled disk list was not being resorted automatically. * Creating partitions was failing on x86 systems. As a result, adding a blank disk to the pool was not working. This was due to a bug in .NET's COM interop. A workaround is now in place. * Do not show the performance UI when creating a new pool. * Fixed issue where error reports were being written out after updating. * Before duplicating a file, update the task status so that the correct folder is shown in the tooltip. * Minor file duplication service tweaks related to the timing of things. * When clicking save on the balancing window, the overall settings are saved first before each balancer's settings are saved. This is to ensure that any changed triggers and the balancing time are processed correctly with the new settings. * Added UI_NoVersion to the UI .config. This will hide the version number from the UI, which is useful for taking demo screenshots / videos. * [D] Changed the part of the read striping algorithm that passively calculates the speed of each disk to work correctly with concurrent I/O. * [D] Fixed synchronization and a division by zero error in the read striping disk selection algorithm. * [D] Fixed crash due to race condition in file create. 2.0.0.387 --------- * Increased the default size of the main window to 750x300. * Fixed installation script for Windows Server 2012 R2 Essentials. * [D] Fixed a memory leak of a few bytes when fully unloading the virtual disk driver. * Moved all persistent UI state information into the UI Store and out of the .config. (your UI state will reset) * Added the ability to sort the pooled disks list in the horizontal UI. The default sort order is now "By Name". * Ignore disk updates from disks that have no media. This was causing the service and UI to refresh too often. Observed this with a DELL USB flash card reader. * Persistent UI settings are now upgraded, so that you don't lose them when performing an update. * Added a new help window that shows up after you create your first pool that explains the basics of how the pool works. * If the UI disconnects from the service then any open UI windows will be automatically closed. * Disk temperature will now be shown in Fahrenheit or Celsius, depending on your Scanner settings. (requires Scanner 2.5.0.2942 or newer) * Added Dashboard component for Windows Server 2012 R2 Essentials. * Added a warning message to the UI when a pool has no drive letters assigned to it. This can happen if automount is disabled in Windows. * A pool that was not assigned a drive letter would display an incorrect duplication status in the UI. * When automount was disabled in Windows, a new pool would not be recognized, and creating a new pool would get stuck as 95% and fail. * Sometimes a new pool would not be recognized if it was assigned a drive letter that was previously assigned to a non-pool volume. * Added "hint-poolpart" command to dpcmd. * Added "add-poolpart" command to dpcmd. * Added "list-poolparts" command to dpcmd. * [D] Added support for receiving pool part hints from user mode. * [D] Fixed an issue where Windows was setting the virtual disk to read-only mode. - This was causing the NFS Server to not work over the pool. * [D] Enabled file ID support by default. (CoveFs_OpenByFileId) * Got rid of the large blank space in UI when creating a new pool in horizontal mode. * Disk tooltips are now centered. * Added DrivePool tab to the Dashboard in Windows Server 2012 Essentials. * Added StableBit DrivePool tab to the Dashboard in WHS 2011 (and similar). - There will be no separate wssx installer. - WSS notifications are not supported. * Added option to increase / decrease the duplication count of a duplicated folder, without first disabling duplication. 2.0.0.355 --------- * Disk performance was stripping out the first directory component. * Rewrote the find common path prefix algorithm to take the '\' characters into account. * [D] Added preliminary EFS support (CoveFs_EfsEnabled in .config). - Right now, background duplication and rebalancing are not supported for EFS encrypted files. * Added a folder size pie chart to the per-folder duplication window. This pie chart is computed automatically whenever you select a folder in the folder duplication window. It breaks down file data vs. duplication data and gives you the exact numbers as they are stored on the disks. You can use this as a visual confirmation that your data is duplicated properly. - The pie chart is not available when other more important tasks are running (such as background duplication). * Child task groups were being un-paused prematurely at times. * [D] When enabling folder duplication, some pool parts may not have been processed leading to inconsistent duplication tags on the pool. This is now fixed. The duplication tag consistency check repairs existing pools with this issue automatically without any user intervention. * Changing the duplication level of a folder while background duplication was running would needlessly restart the duplication pass as many times as you've changed the level. What we were supposed to be doing was aborting the current pass, finding the common path prefix of all of the queued changes and running a single pass over the common prefix. This is now working correctly. * The tooltip over the pool organization bar is now showing more details when background duplication is running, including the common prefix that we're checking and the last folder scanned. * Fixed "Duplicating..." in pool organization bar. It would show up intermittently. * When changing pool / folder duplication level, sometimes the pool organization bar would drop unnecessarily. * Pool modes were not being set properly in some cases (such as read-only pool, etc...). * Added ability to set and see duplication counts > 2 in the UI. * In the per-folder duplication UI, the selected folder and the expand state of all the folders will not change after changing the duplication level. * Added a refresh button to the per-folder duplication UI. * Added a legend to the per-folder duplication UI to explain the new coloring scheme. * In the per-folder duplication UI, folders without any sub-folders will not show the expander without you clicking on it. * After changing the duplication level of a folder, if that folder has any subfolders with explicitly set duplication levels equivalent to the newly set level, we change those explicit levels to 'I'. * Changed how the folder duplication UI shows folder duplication levels as follows: - A "+" is shown for a folder that has one or more subfolders with a different duplication level than itself (a hint for you to expand the folder). This is equivalent to the 'M' flag in CoveFS. The root is always 'M1' by default for DrivePool 1.X compatibility. - Folders with an explicit duplication level set will show up either green or red. - Folders that are inheriting their duplication level are blue. - The actual duplication count set is shown in the 'x?' label. This makes it less confusing to change folder duplication levels and the system should automatically do what is more intuitive. * [D] Implemented a new duplication 'M' tag cleanup routine in CoveFS that is run after every duplication tag set. Duplication 'M' tags with no sub-folders that have explicitly set duplication counts are redundant. Removing them improves the overall performance of the duplication tag query system. * [D] When setting a duplication count, the file system can now optionally make better use of the 'I' (inherit) flag. In addition, if the folder doesn't have a 'M' (multiple) tag, then we can simply remove the tag altogether because all folders have an implicit 'I' tag. For example, when setting a duplication count of '1' on a folder, if the parent folder also has a duplication count of '1' (whether inherited or explicitly set, it doesn't matter), it makes more sense to inherit the duplication count from the parent folder rather than to set it explicitly. So this is what we do now. If we don't do this, then setting a duplication count of '2' on the parent folder has the counter intuitive result of not propagating that duplication count to the one sub-folder with the (previously set) explicit duplication count of '1'. * [D] When setting a duplication count fails, the file system will now notify the service to run a duplication tag consistency check. 2.0.0.345 --------- * Fixed disk enumeration failure. * If a directory was marked as read-only on the pool (not in Explorer, but actual attribute), when removing a disk, that directory would get migrated properly, but would not be deleted from the pool part folder on the disk being removed. We now delete empty read-only folders as well. Windows uses the "read-only" flag on directories to indicate a special folder (such as My Documents or My Pictures). * Fixed a service lock up when it was being stopped. * The UI will now remember which computer is was connected to last, and on startup it will automatically connect to that computer (unless it's unavailable). * Disk performance is now being reported per-pool (not for all pools). * Extended integration DLL to expose the "first seen" time of a pool part. The ordered file placement plug-in makes use of this. * Added static peer support for remote control. Use this when multicasting is not working on your network. - See C:\Program Files\StableBit\DrivePool\RemoteControl.default.xml. - There are further instructions in the XML file. * Fixed task labels not updating their state properly in the UI (Add / Remove disk). * Changed store change notification thread pool performance parameters to resolve a bottleneck that would lead to the service stalling for a few minutes sometimes. Did not affect pool I/O. 2.0.0.333 --------- * Fixed service crash after removing the last disk in the pool. 2.0.0.332 --------- * Duplication tag consistency check now also works with legacy pools (pre 1.3). * Converted the duplication tag consistency check to a pool task. It will run when each pool arrives, and not on service startup. * Changed "Duplicating..." to "Checking..." in the pool organization bar when we're not actually duplicating anything. * Added a comprehensive duplication tag consistency check and repair. Every time that the service starts up it will traverse all of the existing duplication tags on each pool and ensure that each tag on every pool part folder (and sub-folder) is consistent with all of the other pool parts. If a conflict is found it is resolved by examining both tags and constructing a new repaired and valid tag from the contents of the existing tags. Then both tags are overwritten with the repaired tag and a full duplication check is then scheduled to be immediately run over the entire pool. * Fixed a race condition in the code that was turning off CoveFS tracing. This was generating error reports needlessly for those with CoveFS tracing enabled permanently. * [D] Fixed memory leak when pool part find files errors out. This happened if one of your disks dropped from the system unexpectedly. * Incorrect disk names were being shown in the tooltips when the StableBit Scanner was not installed. * Performance UI now remembers its expanded state once again. * [D] When setting a duplication count, always write through the number to disk before considering the set successful (i.e. bypass the cache) (port from 1.X). * [D] Changed how pools are enumerated at boot time to get rid of the 1 second delay between when the virtual disk driver is loaded and when it spawns its disks (port from 1.X). * Put error handler around background duplication size change reporting (port from 1.X). * [D] Fixed drive removal issue where volume manager would not let DrivePool read the pool part ignore tag due to the pool part being marked for deletion. This would cause a removed disk to remain in the pool until a reboot (port from 1.X). * [D] Implemented MDL based read / write requests. Protected MDL writes are disabled. * [D] Fixed crash with race condition in internal buffer management, as reported. 2.0.0.320 --------- * [D] Fixed lock up due to reparse point processing. There was some experimental reparse point processing code added prior to build 312, and it wasn't successfully reverted. Applications that would query the pool for reparse points would lock up with build 312. * Added code to upgrade CoveFS from kernel 8.0 -> 8.1, in case Windows is upgraded and DrivePool is not. * [D] Compiled a new driver for the Windows 8.1 kernel. Windows 8.1 support is new and will require further testing. 2.0.0.312 --------- * Implemented a workaround for a bug in .NET's ReaderWriterLockSlim. Bug observed on Windows 8. Even though there are no lock holders and many waiters, the waiters are not signaled. This was causing the service to lock up once in a while for no reason. Typically you would see "Calculating..." in the pool organization bar, and it would never stop. If your service is in such a state then you must terminate the "DrivePool.Service.exe" process prior to upgrading or just reboot the machine. Pool I/O was not affected by this because all pool I/O is handled in the kernel. * Corrected the tooltip text, Network I/O Boost does not boost write requests by default. (can be enabled in .config) * [D] Network I/O boost was not detecting network activity consistently. 2.0.0.310 --------- * Fixed UI lock up due to a deadlock in the service. * [D] Completely re-engineered how file performance is measured. We no longer parse ETW events in real-time, this is slow and unreliable. CoveFS now maintains file performance data, but only when we are actively querying for it. There is virtually no overhead on the file system when performance data is not needed. * [D] Fixed crash in skip list insertion / removal. Observed on x86. * [D] Increased skip list depth limit on directory listings to support up to 1 million efficient lookups. * Added an error message that is shown when trying to remote control DrivePool which has plug-ins installed that we don't have. * Renamed "File Performance" to "Disk Performance", since it really shows performance of individual disks. * [D] File renames that have the same destination as the source should always succeed. * [D] Added file-level TRIM support for SSDs that may be part of the pool. (Windows 8+) * [D] Offloaded memory / cache manager interaction to NTFS. 2.0.0.280 --------- * Fixed reboot required dialog on upgrade. * [D] Fixed crash in FastIoQueryNetworkOpenInfo, as reported. * Enabled CoveFs_ReportAsNtfs by default. There seem to be many applications that assume FAT32 limitations if the file system does not report as "NTFS", regardless of what the actual reported capabilities are. 2.0.0.274 --------- * Set up more stringent testing procedures for upgrades. * Fixed crash on upgrade, if upgrading on Windows 8 / Server 2012. * File performance will now work with disks that are not assigned a drive letter. * Changed the color scheme on the performance UI a bit. * [D] Fixed crash when removing the last disk from the pool. * Fixed free space refresh error, as reported. * [D] Fixed rare crash in pool part find files, as reported. * [D] Added a dedicated covefs driver for Windows 8 to better support compatibility. * [D] Fixed bad interaction with the Windows Search service on Windows 8 / Server 2012. This was causing the Windows Search service (and as a consequence the rest of the system) to lock up for a few minutes when any operation (such as a rename or delete) was immediately performed on a newly created directory. This looks like a bug in Windows Search that is triggered when a FS supports oplocks but not the USN journal. 2.0.0.266 --------- * [D] Fixed critical bug in FastIoQueryNetworkOpenInfo that was causing a system crash. 2.0.0.265 --------- * [D] Added support for: - FastIoQueryNetworkOpenInfo - FastIoQueryStandardInfo - FastIoQueryBasicInfo 2.0.0.263 --------- * [D] Disabled Fast I/O network reads on Windows 8 / 2012 as a workaround for a system crash. * Added "Pool options" text to the pool options button. * [D] When moving a directory with an explicit per-folder duplication (or that has sub-directories with explicit per-folder duplication counts set) to a new folder on the same pool, make sure to correctly repropagate the M / I flags. * [D] Deleting a directory that had per-folder duplication enabled, and then recreating a new directory with the same name would incorrectly mark the new folder as duplicated as well (usually until a reboot). * [D] Fixed setting per-folder duplication on read-only folder (or folders whose parents may be read-only). 2.0.0.260 --------- * Reduced the load on the CPU when processing real-time file performance data. * Added 2 new .config options for the UI: - UI_VerticalOnly - When set to True, Disables the horizontal UI (and never loads it into memory). - UI_HorizontalLite - When set to True, Disables the performance UI (and never loads it into memory). * The performance UI controls will not be loaded into memory unless the performance UI is expanded. * Performance UI will always start collapsed. * Performance will only be monitored, if at least one connected UI has the performance UI expanded. 2.0.0.256 --------- * [D] Read striping will now take into account the speed of the disks when deciding which disk to read from. It now uses an adaptive algorithm that will passively measure the speed of each disk and select the appropriate one at any given time. * Added "Expand >" to vertical UI to get into Horizontal UI mode (hidden after first use). * Added pool read / write speeds and other various statistics to the performance UI. - Fast I/O percentage. - Read striping percentage, including a breakdown of disk switches vs. disk holds. - I/O prioritization percentage. * [D] Made I/O prioritization be more explicit when requesting a particular priority. * [D] I/O prioritization now allows cached reads through Fast I/O. * Background duplication was not enabling Background I/O as intended. * Enabling / disabling per-folder duplication will only work over that folder when performing background duplication (when possible). * Added a pool file performance UI. This shows you the top file activities on the pool. (not supported in Windows Vista / Server 2008) * [D] Fixed "Reached the end of file" error when enabling duplication on a folder that was previously duplicated, then was moved off of the pool and then moved back onto the pool (and so is no longer duplicated). (Port from 1.3.2) * Changed the rules for horizontal UI mode. DrivePool will now go into horizontal UI mode whenever the width of the window is 2 * the minimum width (ignoring the height). 2.0.0.230 --------- * Added disk remove options. SHIFT+Click on "Remove" to bypass, if you need to quickly remove many disks. * Added rebalance markers and disk usage, for each disk in the pool, in the horizontal UI. (stretch the window wide). 2.0.0.227 --------- * Added check box to per folder duplication that hides hidden folders. Defaults to whatever the OS is set to. * Added DrivePool_VerifyAfterCopy advanced setting (off by default). * [D] Fixed MDL based Fast I/O calls. (port from 1.3.2) * [D] Added support for file IDs. (See CoveFs_OpenByFileId advanced setting) (port from 1.3.2) * [D] Fixed volume information query. * Duplicated files that were not yet duplicated were not being selected for rebalancing. (port from 1.3.2) 2.0.0.225 --------- * [D] Fixed can't create iSCSI target on Windows Server 2012. 2.0.0.222 --------- * [D] Fixed inconsistent disk kernel path causing spontaneous missing disk warning. (observed on iSCSI drobo) 2.0.0.220 --------- * A new horizontal UI mode. Just stretch the UI wide to see it. * Made the licensing notification be more explicit in stating that you can't create new folders on the pool, when you have no license. * [D] Fixed non-Windows clients getting partial directory listings on Windows 8 / Windows Server 2012. * [D] Fixed file properties recognizing folders as volume mount points on Windows 8 / Windows Server 2012. * [D] Fixed indexing service compatibility on Windows 8 / Windows Server 2012. This also fixes Media Streaming on Windows Server 2012 Essentials (rebuild your Windows Search index). * [D] Fixed file change notifications. * Added UI to control per-folder duplication. * [D] Increased the stack reservation limit on x64 to 16 KB. * [D] Added safeguard against multiple concurrent asynchronous directory queries. 2.0.0.202 --------- * Fixed some licensing issues that cropped up as a result of remote control. * When remote controlling a computer, your local logged in user must be an Administrator on the remote computer (i.e. a user who is a member of the Administrators group). * The ability to log in as a different user when remote controlling another computer. - Uses the secure credential store to save your password, if you request to remember it for next time. Open 'Credential Manager' under the Start menu to manage your stored passwords. In addition, passwords are encrypted. 2.0.0.183 --------- * Disk ids were not being persisted properly. Clean up old disk id metadata. * Added remote control management. - Easy, fast and complete. - Complete management UI synchronization across all running instances (except licensing). - Fast automatic discovery using multicast. - Authentication and encryption done by .NET Remoting. - Standard Windows NTLM authentication (via SSPI). - Easily enable or disable remote control in Options. - Automatic Windows Firewall configuration, including removing the rules when not running or disabled. - More to come. * [D] Added O&O driver to prohibited list. 2.0.0.168 --------- * Fix for countries that use a "," as their decimal symbol. The WPF path markup language parser gets confused when provided with decimal numbers in these regions. 2.0.0.165 --------- * Missing DLL prevented DrivePool's automatic updating from working in older builds. * Fixed disable privilege bug that was causing background duplication to fail on subsequent runs. * [D] Fixed running EXEs from the pool as administrator on Windows 8 and Windows 2012. 2.0.0.160 --------- * [D] Server 2012 Essentials compatibility. * Link in Server 2012 Essentials Dashboard to launch DrivePool UI from the Server Folders tab. 2.0.0.154 --------- * Added dpcmd.exe. Just open the command prompt and type 'dpcmd' for usage. * Wrote a new UI from scratch. * Completely rewrote the DrivePool service. - New hierarchical concurrent background task system with Store integration. - Got rid of obsolete code. * [D] Ported drivers to 32-bit. * [D] Ported drivers to Vista and newer.