From c6910baf361a4e7c1fbc2354875c4250452e2251 Mon Sep 17 00:00:00 2001 From: Mathieu Othacehe Date: Mon, 27 Dec 2021 19:12:54 +0100 Subject: installer: Ignore small devices. Filter the devices that are smaller than 2GiB in the device selection list. * gnu/installer/parted.scm (%min-device-size): New variable. (non-install-devices): Rename it ... (eligible-devices): ... this way. Filter the install device as well as the small devices. * gnu/installer/newt/partition.scm (run-partitioning-page): Adapt it. --- gnu/installer/parted.scm | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) (limited to 'gnu/installer/parted.scm') diff --git a/gnu/installer/parted.scm b/gnu/installer/parted.scm index 289cd660fd..66e07574c9 100644 --- a/gnu/installer/parted.scm +++ b/gnu/installer/parted.scm @@ -81,7 +81,7 @@ (define-module (gnu installer parted) with-delay-device-in-use? force-device-sync - non-install-devices + eligible-devices partition-user-type user-fs-type-name partition-filesystem-user-type @@ -356,28 +356,49 @@ (define (installer-root-partition-path) (and=> (uuid root) find-partition-by-uuid))))) -(define (non-install-devices) - "Return all the available devices, except the install device." +;; Minimal installation device size. +(define %min-device-size + (* 2 GIBIBYTE-SIZE)) ;2GiB + +(define (eligible-devices) + "Return all the available devices except the install device and the devices +which are smaller than %MIN-DEVICE-SIZE." (define the-installer-root-partition-path (installer-root-partition-path)) + (define (small-device? device) + (let ((length (device-length device)) + (sector-size (device-sector-size device))) + (and (< (* length sector-size) %min-device-size) + (syslog "~a is not eligible because it is smaller than ~a.~%" + (device-path device) + (unit-format-custom-byte device + %min-device-size + UNIT-GIGABYTE))))) + ;; Read partition table of device and compare each path to the one ;; we're booting from to determine if it is the installation ;; device. (define (installation-device? device) ;; When using CDROM based installation, the root partition path may be the ;; device path. - (or (string=? the-installer-root-partition-path - (device-path device)) - (let ((disk (disk-new device))) - (and disk - (any (lambda (partition) - (string=? the-installer-root-partition-path - (partition-get-path partition))) - (disk-partitions disk)))))) - - (remove installation-device? (devices))) + (and (or (string=? the-installer-root-partition-path + (device-path device)) + (let ((disk (disk-new device))) + (and disk + (any (lambda (partition) + (string=? the-installer-root-partition-path + (partition-get-path partition))) + (disk-partitions disk))))) + (syslog "~a is not eligible because it is the installation device.~%" + (device-path device)))) + + (remove + (lambda (device) + (or (installation-device? device) + (small-device? device))) + (devices))) ;; -- cgit v1.2.3