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]] | ||
[ | 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 | * 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]. | ||
* | * 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 | ||
|- | |- | ||
| | | <tt>CDROM_TIMED_MEDIA_CHANGE</tt> | ||
| 1.0.0 | | | ||
| | | 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 HFS/HFS+ filesystems | | Make HFS/HFS+ filesystems | ||
| Line 35: | Line 76: | ||
| mkfs.hfs, mkfs.hfsplus | | mkfs.hfs, mkfs.hfsplus | ||
|- | |- | ||
| | | Filesystem signature wiping | ||
| 1.0. | | 1.0.2 | ||
| | | wipefs | ||
|- | |- | ||
| | | Create/manipulate MSDOS partition tables | ||
| 1.0. | | 1.0.2 | ||
| | | | ||
|- | |- | ||
| | | Create/manipulate Apple Partition Maps | ||
| 1.0. | | Create added in 1.0.4 | ||
| | | | ||
|- | |- | ||
| 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 | ||
|- | |- | ||
| | | 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 | | Make vfat filesystems | ||
| 1.0. | | 1.0.0 | ||
| mkfs.vfat | |||
|- | |||
| Create/manipulate GPT partition tables | |||
| 1.0.0 | |||
| | | | ||
|- | |- | ||
| Line 71: | Line 136: | ||
| | | | ||
|- | |- | ||
| | | SMART status check | ||
| 1.0. | | 1.0.0 | ||
| libatasmart | | libatasmart | ||
|- | |- | ||
| | |- | ||
| UEFI boot preparation (UEFI bootloader, ESP, /etc/fstab) | |||
| 1.0.0 | | 1.0.0 | ||
| | | grub2 | ||
|- | |- | ||
| | | BIOS boot preparation (BIOS bootloader, /etc/fstab) | ||
| 1.0. | | 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, | 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 | | DMI lane | ||
| | | n/a | ||
| 5 | | 5 | ||
| 10 | | 10 | ||
|- | |- | ||
| DMI 2.0 | | DMI 2.0 lane | ||
| | | 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 | ||
[[CATEGORY: Projects]] | [[CATEGORY: Projects]] | ||
[[CATEGORY: SprezzOS]] | [[CATEGORY: SprezzOS]] | ||