Growlight: Difference between revisions

 
(41 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[File:glight.png|right|thumb|alt="Growlight logo"|Grow, baby, grow]]
[[File:glight.png|right|thumb|alt="Growlight logo"|Grow, baby, grow]]
[http://www.sprezzatech.com/growlight.html Growlight] is Sprezzatech's open source disk management utility and system installation prep tool, designed for use with [http://www.sprezzatech.com/sprezzos.html SprezzOS].
Growlight is a powerful open source tool for visualizing and managing persistent storage under Linux, built atop [[Notcurses]]. It began life as Sprezzatech's system installation prep tool, designed for use with [http://www.sprezzatech.com/sprezzos.html SprezzOS], but is now aimed at more mainstream (and non-defunct) distributions.
* Code lives at [https://github.com/dankamongmen/growlight GitHub].
* Code lives at [https://github.com/dankamongmen/growlight GitHub].
* Downloads are available at http://dank.qemfd.net/pub or from GitHub
* Downloads are available from [https://github.com/dankamongmen/growlight/releases GitHub].
* Growlight is present in [https://src.fedoraproject.org/rpms/growlight Fedora Core], [https://tracker.debian.org/pkg/growlight Debian], Alpine Edge, the AUR, and OpenSUSE.
* There is a [https://groups.google.com/forum/#!forum/growlight-dev mailing list]. You can post by mailing [mailto:growlight-dev@googlegroups.com growlight-dev@googlegroups.com].
* There is a [https://groups.google.com/forum/#!forum/growlight-dev mailing list]. You can post by mailing [mailto:growlight-dev@googlegroups.com growlight-dev@googlegroups.com].
* The [https://www.sprezzatech.com/bugs/buglist.cgi?list_id=8&resolution=---&query_format=advanced&component=Growlight Growlight] component of the SprezzOS project can be found on [https://www.sprezzatech.com/bugs Sprezzabugs].
* Bugs are now being tracked via [https://github.com/dankamongmen/growlight/issues Github issues]
 
==Debian installer==
My talk, "[https://debconf21.debconf.org/talks/3-proposing-a-new-d-i-disk-preparation-tool-growlight/ proposing a new d-i disk preparation tool]" at [https://debconf21.debconf.org/ debconf21] introduces the idea of using growlight within the mainstream Debian Installer.
 
==Some capabilities==
==Some capabilities==
{|class="wikitable" border="1"
{|class="wikitable" border="1"
Line 11: Line 16:
! Helpers
! Helpers
|-
|-
| Make ext2, ext3, ext4 filesystems
| <tt>CDROM_TIMED_MEDIA_CHANGE</tt>
| 1.0.0
|
| e2fsprogs (mkfs.ext*)
| Linux 5.16
|-
| EFIstub setup
|
| efibootmgr
|-
| [https://phoronix.com/scan.php?page=news_item&px=Linux-5.15-Disk-Seq-No BLKGETDISKSEQ]
|
| Linux 5.15
|-
| [https://systemd.io/DISCOVERABLE_PARTITIONS Discoverable partitions]
|
|
|-
| NVMe-ZNS recognition
|
| Linux 5.9
|-
| exFAT support
|
| Linux 5.6, exfat-utils
|-
| Linux 5.6 "drivetemp" support
|
| Linux 5.6
|-
| [[NVMe|Optane]] DCPMM device support
|
| ipmctl
|-
| Collect and display statistics
| 1.1.0
| procfs
|-
| [[NVMe]] device support
| 1.0.5
| nvme-cli
|-
|-
| Pass stride_width and stripe parameters to mkfs.ext*
| Pass stride_width and stripe parameters to mkfs.ext*
| 1.0.2
| 1.0.2
| e2fsprogs (mkfs.ext*)
| e2fsprogs (mkfs.ext*)
|-
| Make [[ZFS]] filesystems
| 1.0.1
| zfs
|-
|-
| Make jfs filesystems
| Make jfs filesystems
Line 26: Line 71:
| 1.0.2
| 1.0.2
| mkfs.xfs
| mkfs.xfs
|-
| Make vfat filesystems
| 1.0.0
| mkfs.vfat
|-
|-
| Make HFS/HFS+ filesystems
| Make HFS/HFS+ filesystems
Line 35: Line 76:
| mkfs.hfs, mkfs.hfsplus
| mkfs.hfs, mkfs.hfsplus
|-
|-
| Make swap devices
| Filesystem signature wiping
| 1.0.0
| 1.0.2
| mkswap
| wipefs
|-
|-
| Labeled filesystem creation
| Create/manipulate MSDOS partition tables
| 1.0.0
| 1.0.2
|
|
|-
|-
| Filesystem signature wiping
| Create/manipulate Apple Partition Maps
| 1.0.2
| Create added in 1.0.4
| wipefs
|
|-
|-
| Create MD aggregates
| Create MD aggregates
Line 53: Line 94:
| Create DM aggregates
| Create DM aggregates
| needs testing
| needs testing
|
|-
| MD / zpool aggregate scan + import
| 1.0.1
| mdadm, zpool
|-
| Temperature sensing (where supported)
| 1.0.1
| libatasmart
|-
| Rotation speed / Transport detection
| 1.0.1
|
|
|-
|-
Line 59: Line 112:
| zpool, zfs
| zpool, zfs
|-
|-
| Create/manipulate GPT partition tables
| Make ext2, ext3, ext4 filesystems
| 1.0.0
| e2fsprogs (mkfs.ext*)
|-
| Make swap devices
| 1.0.0
| mkswap
|-
| Labeled filesystem creation
| 1.0.0
| 1.0.0
|
|
|-
|-
| Create/manipulate MSDOS partition tables
| Make vfat filesystems
| 1.0.2
| 1.0.0
| mkfs.vfat
|-
| Create/manipulate GPT partition tables
| 1.0.0
|
|
|-
|-
Line 71: Line 136:
|
|
|-
|-
| Temperature sensing (where supported)
| SMART status check
| 1.0.1
| 1.0.0
| libatasmart
| libatasmart
|-
|-
| SMART status check
|-
| UEFI boot preparation (UEFI bootloader, ESP, /etc/fstab)
| 1.0.0
| 1.0.0
| libatasmart
| grub2
|-
|-
| Rotation speed / Transport detection
| BIOS boot preparation (BIOS bootloader, /etc/fstab)
| 1.0.1
| 1.0.0
|
| grub2
|-
|-
|}
|}
Line 90: Line 156:
* From [[C]]: use the BLKRRPART or BLKPG ioctls
* From [[C]]: use the BLKRRPART or BLKPG ioctls
** BLKRRPART is deprecated. It fails if any partition on the disk is in use, wheras BLKPG fails only if given invalid arguments, or attempting to modify a partition that is being used.
** BLKRRPART is deprecated. It fails if any partition on the disk is in use, wheras BLKPG fails only if given invalid arguments, or attempting to modify a partition that is being used.
Growlight handles all of this for you, of course.


==Identifying Block Devices==
==Identifying Block Devices==
Line 98: Line 165:
* '''Partition table''': A structure describing logical volumes on a single disk
* '''Partition table''': A structure describing logical volumes on a single disk
** '''Disklabel''' An old ([[FreeBSD|BSDish]]) name for a partition table
** '''Disklabel''' An old ([[FreeBSD|BSDish]]) name for a partition table
* '''Superblock''' A filesystem's metadata, usually occupying the first few sectors
** Sometimes backed up, sometimes multiple times.
* '''Label''' A string of up to 16 bytes associated with a filesystem
* '''Label''' A string of up to 16 bytes associated with a filesystem
** '''Volume Label''' An old (DOSish) name for a filesystem label
** '''Volume Label''' An old (DOSish) name for a filesystem label
* '''Master Boot Record''' The first sector on a disk in a BIOS/MBR machine
* '''Master Boot Record''' The first sector on a disk in a BIOS/MBR machine
** '''Boot sector''' The first sector of a bootable partition
** '''Boot sector''' The first sector of a bootable partition
Thus:
Thus:
* A ''disk'' has a ''WWN'', a ''model'', and a ''serial number''.
* A ''disk'' has a ''WWN'', a ''model'', and a ''serial number''.
Line 144: Line 214:
| 9.4ZB
| 9.4ZB
| 128 * ''n''
| 128 * ''n''
|-
! APM
| 2TB
| 2TB
| n, requiring n + 1 512-byte sectors
|-
|-
|}
|}
===Unique Identification===
===Unique Identification===
It is useful to uniquely identify block devices in a persistent manner. Device topology and thus <tt>/dev</tt> entry naming can change dynamically -- devices can be moved between boots; hot pluggable drives can be attached and removed; media can be ejected and replaced or reinserted. For physical devices, the unique identification ought be associated with the physical device. For virtual devices, the unique identification ought be associated with the virtual device and its component devices.
It is useful to uniquely identify block devices in a persistent manner. Device topology and thus <tt>/dev</tt> entry naming can change dynamically -- devices can be moved between boots; hot pluggable drives can be attached and removed; media can be ejected and replaced or reinserted. For physical devices, the unique identification ought be associated with the physical device. For virtual devices, the unique identification ought be associated with the virtual device and its component devices.
Line 157: Line 233:


==Resources==
==Resources==
Note that even using DMI 2.0, the standard 4x southbridge uplink can be supersaturated by four SATA3 devices.
Note that even using DMI 2.0, a 4x southbridge uplink can be supersaturated by four SATA3 devices.
{| class="wikitable" border="1"
{| class="wikitable" border="1"
! Interface
! Interface
Line 224: Line 300:
| 32
| 32
|-
|-
| DMI lane (almost always x4, sometimes x2)
| DMI lane
| 2.5 Gbps (312.5 MB/s)
| n/a
| 5
| 5
| 10
| 10
|-
|-
| DMI 2.0
| DMI 2.0 lane
| 5 Gbps (625 MB/s)
| n/a
| 10
| 10
| 20
| 20
|-
| DMI 3.0 lane
| n/a
| 20
| 40
|-
|-
|}
|}
Line 289: Line 370:
* Extract true parameters from SSDs and 4k sector (especially WD-EARS) drives
* Extract true parameters from SSDs and 4k sector (especially WD-EARS) drives
* Properly align everything
* Properly align everything
==Possible Goals==
* Install either Linux or FreeBSD


[[CATEGORY: Projects]]
[[CATEGORY: Projects]]
[[CATEGORY: SprezzOS]]
[[CATEGORY: SprezzOS]]