My little blog can’t be this cute!
commit: dc4fb816954d7acc90f90514cc5ccd7f36a12f9a
parent: a57fa4740017ca96fd970569d84affbba566e019
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Tue,  4 Jul 2017 17:37:22 +0200

[articles] Disk identification


Aarticles/Disk identification.html65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aarticles/Disk identification.shtml16++++++++++++++++
3 files changed, 84 insertions(+), 0 deletions(-)

diff --git a/articles/Disk identification.html b/articles/Disk identification.html @@ -0,0 +1,65 @@ +<h1><a href="/articles/Disk%20identification">Disk identification</a></h1> +<p>So the one for network interface is now okay-ish. I done a quick look at how it works for… disks. So most of it was done under Linux, but I know this nightmare under OpenSolaris(I recommend <a href="http://sysunconfig.net/unixtips/solaris80.20.pdf">20% of Solaris Knowledge that solves 80% of your needs</a>; but only 8 slices/partitions, non-intuitive, no file hierarchy… why), Plan9front(a bit better, at least partitions are under a directory).</p> +<p>And as you’re probably using <code>lsblk</code> and/or <code>blkid</code> or even <code>fdisk -l</code>(I use that when I’m on a non-Linux Unix) to identify as a human your disks, I done a quick look for fun at disk identifiers… (intended more for machines I guess) and… oh noes.</p> +<pre><code>$ lsblk -oTRAN,NAME,SIZE,FSTYPE,PARTUUID,UUID,WWN +TRAN NAME SIZE FSTYPE PARTUUID UUID WWN +usb sdf 2G + └─sdf1 2G vfat +usb sdd 931.5G + └─sdd1 931.5G ntfs-3g 874ddc9f-01 FEBC2BA2BC2B5505 +sata sdb 1.8T zfs_member 15625953673200575561 0x11804586289146122240x +sata sdg 111.8G crypto_LUKS 7979cfc6-568f-4b3a-bfc4-301c92316767 0x17202986447841742850x +sata sdc 189.9G + ├─sdc2 189.9G crypto_LUKS caadf50b-7419-4379-b34e-6cbdb9fb9e17 86106360-90e8-425e-b37e-33131b23a6b0 + │ └─root1 189.9G zfs_member 2052176674175130762 + └─sdc1 2M d3e52e3c-2c83-48e5-af2f-8c3ce10131aa +sata sda 189.9G + ├─sda2 256M b585598d-8b2c-4db8-b58c-65bfe314d57e + ├─sda3 248M crypto_LUKS d4d61264-c2c9-4953-8c59-3ac265d986e3 9877c105-252e-4141-97df-358f14daa2a8 + └─sda1 189.4G crypto_LUKS a359857c-49eb-44c0-936c-464c150d20a0 1c578f43-6f16-497c-ba88-986609ffa1d6 + └─root 189.4G +$ blkid +/dev/sda1: UUID="1c578f43-6f16-497c-ba88-986609ffa1d6" TYPE="crypto_LUKS" PARTLABEL="encrypted" PARTUUID="a359857c-49eb-44c0-936c-464c150d20a0" +/dev/sda3: UUID="9877c105-252e-4141-97df-358f14daa2a8" TYPE="crypto_LUKS" PARTLABEL="boot-efi" PARTUUID="d4d61264-c2c9-4953-8c59-3ac265d986e3" +/dev/sdb: LABEL="seagate" UUID="15625953673200575561" UUID_SUB="11105316071247026470" TYPE="zfs_member" +/dev/sdc2: UUID="86106360-90e8-425e-b37e-33131b23a6b0" TYPE="crypto_LUKS" PARTUUID="caadf50b-7419-4379-b34e-6cbdb9fb9e17" +/dev/sdd1: LABEL="TOSHIBA EXT" UUID="FEBC2BA2BC2B5505" TYPE="ntfs" PARTUUID="874ddc9f-01" +/dev/mapper/root: LABEL="zroot" UUID="2052176674175130762" UUID_SUB="12007847542772910046" TYPE="zfs_member" +/dev/sdg: UUID="7979cfc6-568f-4b3a-bfc4-301c92316767" TYPE="crypto_LUKS" +/dev/mapper/root1: LABEL="zroot" UUID="2052176674175130762" UUID_SUB="5697203163307082646" TYPE="zfs_member" +/dev/sda2: PARTLABEL="boot" PARTUUID="b585598d-8b2c-4db8-b58c-65bfe314d57e" +/dev/sdc1: PARTUUID="d3e52e3c-2c83-48e5-af2f-8c3ce10131aa" +/dev/sdf1: SEC_TYPE="msdos" TYPE="vfat" +</code></pre> +<p>If you look enough at it… NONE of them works and wtf is <code>UUID_SUB</code> printing out of nowhere. So as you’re probably not <code>LABEL</code>’ing all your hard-drives because your system sucks… The only thing I found so far that is the least broken under linux(+(e)udev) is <code>/dev/disk/by-id</code>.</p> +<p>So quick list of things that are nice/works:</p><ul> + <li><code>DISK ID</code> (MODEL+SERIAL) and partition ID (MBR/GPT thing) + <li>PCI/<code>BUS ID</code>s (like: <code>/proc/bus/pci/x/y</code> in Linux) + <li>Partition table/disk as a directory, partitions as files (ayo Plan9) + <li>The disk slot, useful when you plug (some of) your disk(s) by their slot (IDE: Primary/Secondary Master/Slave; SATA: 1,2,3…; USB: bus/network_iface equivalent?) +</ul> +<h2>Proposition</h2> +The following is in pseudo-code, then a <code>tree</code>-like view +<code> +BUS ID += PCI-ID /* maybe put SCSI-ID here too for compatibility */ +DISK SLOT = IDE(Primary Master, Primary Slave, …), SATA(1, 2, 3, …), … +<ul> + <li>/dev/…/${BUS ID}/<ul> + <li>by-label/${DISK LABEL} → ${DISK ID}</li> + <li>by-slot/${DISK SLOT} → ${DISK ID}</li> + <li>${DISK ID}<ul> + <li>by-label/${PARTITION LABEL} → ${PARTITION ID}</li> + <li>${PARTITION ID}</li> + <li>raw</li> + </ul></li> + </ul></li> +</ul></code> +<h3>Know things</h3> +<ul> + <li>labels being a free-form string it can be the same as another ID, a <code>by-label</code> directory have to be made + <li>I have not mentionned disk and partitions UUIDs, could be kept for legacy, but I’m in favor of not keeping them as they are broken + <li>in Plan9 there is the <code>data</code> file to have full access to the disk, I named it <code>raw</code> here as I think it’s more intiutive (and keeping the name <code>data</code> because of Plan9 is almost no use considering how dead Plan9 currently is compared to Linux|BSD|Solaris) + <li>The <code>BUS ID</code> directory allows to get sane <code>DISK SLOT</code> + <li>Maybe it doesn’t work for everything (please contact, fork, patch, …) but as it is about the same thing as what SunOS and Plan9 uses I think I’m safe saying : This should work and be flexible enough</li> +</p> +<p>Also anyway I think <code>findfs(8)</code> should be modified to add at least the <code>DISK ID</code> in it</p> diff --git a/articles/Disk identification.shtml b/articles/Disk identification.shtml @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html lang="en"> + <head> +<!--#include file="/templates/head.shtml" --> + <title>Disk Identification — Cyber-home of lanodan</title> + <link type="application/rss+xml" href="/rss" title="flux RSS" rel="alternate"></link> + </head> + <body> +<!--#include file="/templates/en/nav.shtml" --> + <article> +<!--#include file="/articles/Disk Identification.html"--> + </article> + <a href="/articles/Disk%20identification.html">article only(plain HTML)</a> +<!--#include file="/templates/en/footer.html" --> + </body> +</html> diff --git a/home.shtml b/home.shtml @@ -8,6 +8,9 @@ <body> <!--#set var="transPageUrl" value='accueil' --><!--#include file="templates/en/nav.shtml" --> <article> +<!--#include file="/articles/Disk identification.html"--> + </article> + <article> <!--#include file="/articles/Gitter sucks.html"--> </article> <article>