#!/usr/bin/php -q \r"); if (exec("zpool trim -w $name 2>&1")=='') write(zfs_info($name)."\r","\n"); else write("\r"); } else { if (exec("zpool trim -w $name 2>&1")=='') echo zfs_info($name)."\n"; } } } /* Perform fstrim on XFS and Btrfs filesystems */ function xfs_btrfs_trim($write) { /* Use findmnt with JSON output and jq to ensure accurate parsing */ exec("findmnt -lnt btrfs,xfs -J | jq -r '.filesystems[] | select(.source | test(\"^/dev/\")) | \"\\(.target)\\t\\(.source)\"'", $mounts); foreach ($mounts as $mount) { /* Split using tab as the delimiter */ $parts = explode("\t", $mount, 2); /* Ensure we have both target and source */ if (count($parts) < 2) continue; [$target, $source] = $parts; $target_escaped = escapeshellarg($target); /* Ensure $source is valid */ if (empty($source)) continue; /* Resolve the actual device backing the mount */ $device = trim(exec("findmnt -no SOURCE " . escapeshellarg($target))); /* Skip if we cannot resolve a device */ if (empty($device)) continue; /* Check if the device is an HDD */ if (is_hdd($device)) continue; if ($write) write("$target: ... \r"); $trim = exec("fstrim -v $target_escaped 2>/dev/null"); /* Handle output based on mode (write or echo) */ if ($write) { if ($trim) { write("$trim on $source\r", "\n"); } else { write("\r"); } } else { if ($trim) { echo("$trim on $source\n"); } } } } write(_("TRIM operation started")."\n","\n","\n"); // trim btrfs, xfs xfs_btrfs_trim(true); // trim zfs zfs_trim(true); write(_("Finished")."\n",'_DONE_',''); ?>