Check out my first novel, midnight's simulacra!
Growlight: Difference between revisions
No edit summary |
No edit summary |
||
Line 4: | Line 4: | ||
* 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]. | * 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]. | ||
==Some capabilities== | |||
{|class="wikitable" border="1" | |||
! Capability | |||
! Version | |||
! Helpers | |||
|- | |||
| Make ext2, ext3, ext4 filesystems | |||
| 1.0.0 | |||
| e2fsprogs (mkfs.ext*) | |||
|- | |||
| Pass stride_width and stripe parameters to mkfs.ext* | |||
| 1.0.2 | |||
| e2fsprogs (mkfs.ext*) | |||
|- | |||
| Make jfs filesystems | |||
| 1.0.3 | |||
| mkfs.jfs | |||
|- | |||
| Make xfs filesystems | |||
| 1.0.2 | |||
| mkfs.xfs | |||
|- | |||
| Make vfat filesystems | |||
| 1.0.0 | |||
| mkfs.vfat | |||
|- | |||
| Make HFS/HFS+ filesystems | |||
| needs testing | |||
| mkfs.hfs, mkfs.hfsplus | |||
|- | |||
| Make swap devices | |||
| 1.0.0 | |||
| mkswap | |||
|- | |||
| Labeled filesystem creation | |||
| 1.0.0 | |||
| | |||
|- | |||
| Filesystem signature wiping | |||
| 1.0.2 | |||
| wipefs | |||
|- | |||
| Create MD aggregates | |||
| 1.0.2 | |||
| mdadm | |||
|- | |||
| Create DM aggregates | |||
| needs testing | |||
| | |||
|- | |||
| Create ZFS zpools | |||
| 1.0.1 | |||
| zpool, zfs | |||
|- | |||
| Create/manipulate GPT partition tables | |||
| 1.0.0 | |||
| | |||
|- | |||
| Create/manipulate MSDOS partition tables | |||
| 1.0.2 | |||
| | |||
|- | |||
| Align partitions based off physical sector size | |||
| 1.0.0 | |||
| | |||
|- | |||
|} | |||
==Partitions and the [[Linux]] kernel== | ==Partitions and the [[Linux]] kernel== | ||
When a disk's partitioning is changed, the kernel must be notified via an explicit ioctl() or [[sysfs]] operation. | When a disk's partitioning is changed, the kernel must be notified via an explicit ioctl() or [[sysfs]] operation. |
Revision as of 05:40, 28 September 2012
Growlight is Sprezzatech's open source disk management utility and system installation prep tool, designed for use with SprezzOS.
- Code lives at GitHub.
- There is a mailing list. You can post by mailing growlight-dev@googlegroups.com.
- The Growlight component of the SprezzOS project can be found on Sprezzabugs.
Some capabilities
Capability | Version | Helpers |
---|---|---|
Make ext2, ext3, ext4 filesystems | 1.0.0 | e2fsprogs (mkfs.ext*) |
Pass stride_width and stripe parameters to mkfs.ext* | 1.0.2 | e2fsprogs (mkfs.ext*) |
Make jfs filesystems | 1.0.3 | mkfs.jfs |
Make xfs filesystems | 1.0.2 | mkfs.xfs |
Make vfat filesystems | 1.0.0 | mkfs.vfat |
Make HFS/HFS+ filesystems | needs testing | mkfs.hfs, mkfs.hfsplus |
Make swap devices | 1.0.0 | mkswap |
Labeled filesystem creation | 1.0.0 | |
Filesystem signature wiping | 1.0.2 | wipefs |
Create MD aggregates | 1.0.2 | mdadm |
Create DM aggregates | needs testing | |
Create ZFS zpools | 1.0.1 | zpool, zfs |
Create/manipulate GPT partition tables | 1.0.0 | |
Create/manipulate MSDOS partition tables | 1.0.2 | |
Align partitions based off physical sector size | 1.0.0 |
Partitions and the Linux kernel
When a disk's partitioning is changed, the kernel must be notified via an explicit ioctl() or sysfs operation.
- From the command line: echo 1 | sudo tee -a /sys/block/<device>/device/rescan
- 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.
Identifying Block Devices
Terminology!
- UUID A 128-bit RFC 4122 number. Used in GPT for disks and partitions. Used in many filesystems.
- WWN A 64- or 128-bit number associated with physical components. Makes use of IEEE OUIs.
- Partition table: A structure describing logical volumes on a single disk
- Disklabel An old (BSDish) name for a partition table
- Label A string of up to 16 bytes associated with a filesystem
- Volume Label An old (DOSish) name for a filesystem label
- Master Boot Record The first sector on a disk in a BIOS/MBR machine
- Boot sector The first sector of a bootable partition
Thus:
- A disk has a WWN, a model, and a serial number.
- A GPT partition table has a UUID, sometimes called the disk GUID
- but though there is only one per disk, it's a property of the GUID Partition Table
- A MBR partition table has nothing, really.
- A GPT partition has a UUID and a name of up to 36 UTF-16LE units
- A GPT partition also has a 128-bit number for its partition type, but they're commonly defined
- Thus UUID/GUID is really a misnomer, but whatever
- 024DEE41-33E7-11D3-9D69-0008C781F39F -- MBR scheme
- C12A7328-F81F-11D2-BA4B-00A0C93EC93B -- EFI system partition (ESP)
- ebd0a0a2-b9e5-4433-87c0-68b6b72699c7 -- basic data partition
- A19D880F-05FC-4D3B-A006-743F0F84911E -- linux raid
- etc...
- A GPT partition also has a 128-bit number for its partition type, but they're commonly defined
- A MBR partition once again has nothing, just an 8-bit type.
- A filesystem probably has a label, and probably has a UUID. Depends on the filesystem.
Partition Tables
FIXME I think some of these values are wrong, maybe embarrassingly so
Table type | Max disk size | Max partition size | Max partitions |
---|---|---|---|
MBR (CHS) | 8GB | 8GB | 4 primary
OR 3 primary, 1 extended, arbitrarily many logical |
MBR (LBA) | 8TB | 2TB | 4 primary
OR 3 primary, 1 extended, arbitrarily many logical |
GPT | 9.4ZB | 9.4ZB | 128 * n |
Unique Identification
It is useful to uniquely identify block devices in a persistent manner. Device topology and thus /dev 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.
- Hard drives: Most SAS, FC and ATA drives have a WWN/WWID burned in. These identifiers are 8 or 16 bytes (64 or 128 bits).
- NAA1: 8 bytes, composed of 00010000:00000000 followed by a MAC-48 (10:00:xx:xx:xx:xx:xx:xx)
- NAA2: 8 bytes, composed of 0010vvvv:vvvvvvvv (the 24 v bits are vendor-defined), followed by a MAC-48 (2v:vv:xx:xx:xx:xx:xx:xx)
- ... FIXME
- Fibre Channel ports and switches: WWSN / WWPN. The WWSN/WWPN namespaces overlap one another and the WWN space.
- MD devices: 16-byte UUID
- ZFS zpools: 16-byte UUID
Resources
Note that even using DMI 2.0, the standard 4x southbridge uplink can be supersaturated by four SATA3 devices.
Interface | Max theoretical bandwidth | x2 | x4 |
---|---|---|---|
SATA | 1.5 Gbps (187.5 MB/s) | 3 | 6 |
SATA 2 | 3 Gbps (375 MB/s) | 6 | 12 |
SATA 3 | 6 Gbps (750 MB/s) | 12 | 24 |
SAS | 2.4 Gbps (300 MB/s) | 4.8 | 9.6 |
SAS 2 | 4.8 Gbps (600 MB/s) | 9.6 | 19.2 |
SAS 3 | 9.6 Gbps (1.2 GB/s) | 19.2 | 38.4 |
USB 1.1 | 12 Mbps (1.5 MB/s) | n/a | n/a |
USB 2 | .48 Gbps (60 MB/s) | n/a | n/a |
USB 3 | 5 Gbps (625 MB/s) | n/a | n/a |
PCIe lane | 2 Gbps (250 MB/s) | 4 | 8 |
PCIe 2.0 lane | 4 Gbps (500 MB/s) | 8 | 16 |
PCIe 3.0 lane | 8 Gbps (1 GB/s) | 16 | 32 |
DMI lane (almost always x4, sometimes x2) | 2.5 Gbps (312.5 MB/s) | 5 | 10 |
DMI 2.0 | 5 Gbps (625 MB/s) | 10 | 20 |
Quick Path Interconnect (QPI) works at different frequencies and usually employs 20 lanes.
8 SATAII devices on 8xPCIe 2.0: 3GB/s on 4GB/s ✔ LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03) [0:0:0:0] disk ATA ST2000DL003-9VT1 CC3C [0:0:1:0] disk ATA ST2000DL003-9VT1 CC3C [0:0:2:0] disk ATA ST2000DL003-9VT1 CC32 [0:0:3:0] disk ATA ST2000DL003-9VT1 CC3C [0:0:4:0] disk ATA INTEL SSDSA2M080 02HD [0:0:5:0] disk ATA WDC WD20EARS-00M 51.0 [0:0:6:0] disk ATA WDC WD20EARS-00M 51.0 [0:0:7:0] disk ATA ST2000DL003-9VT1 CC32 2 SATAIII devices on 1xPCIe 2.0: 1.5GB/s on 500MB/s ✘ Marvell Technology Group Ltd. 88SE9120 SATA 6Gb/s Controller (rev 12) [10:0:0:0] disk ATA ST2000DL003-9VT1 CC32 [11:0:0:0] disk ATA ST3000DM001-9YN1 CC9C 1 SATAII device on USB 2.0: 375MB/s on 480MB/s ✔− Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (rev 05) [19:0:0:0] disk HTC Android Phone 0100 1 SATAIII device + 1 SATAII device on 1xPCIe 2.0: 1.125GB/s on 500MB/s ✘ Marvell Technology Group Ltd. 88SE9123 PCIe SATA 6.0 Gb/s controller (rev 11) [2:0:0:0] disk ATA INTEL SSDSA2CW12 0302 [3:0:0:0] disk ATA ST2000DL003-9VT1 CC32 4 SATAII devices + 1 SATAIII-on-SATAII device (✘) on PCI 2.0 PCH (?) Intel Corporation 6 Series/C200 Series Chipset Family SATA AHCI Controller (rev 05) [4:0:0:0] disk ATA ST9320423AS SDM1 [5:0:0:0] disk ATA ST9320423AS SDM1 [6:0:0:0] cd/dvd ATAPI iHBS112 2 CL0F [7:0:0:0] disk ATA WDC WD20EARX-00P 51.0 [9:0:0:0] disk ATA ST3000DM001-9YN1 CC9C 1 MDRAID6 1 MDRAID1 1 ZRAID2
Definite Goals
- Boot with a single image on UEFI/BIOS-based machines
- As much compatibility with debian installer as is reasonable/justified
- Look as good as is reasonable
- Robustness in the face of lossy/problematic devices
Disks
- Fully support ZFS during install, include RAIDZ setup
- Use GPT (correctly) by default.
- Extract true parameters from SSDs and 4k sector (especially WD-EARS) drives
- Properly align everything
Possible Goals
- Install either Linux or FreeBSD