On Thu, Mar 30, 2017 at 09:10:01AM -0400, Jiri B wrote:
> > > > diff -u -p -r1.988 install.sub
> > > > --- distrib/miniroot/install.sub        13 Mar 2017 17:08:31 -0000      
> > > > 1.988
> > > > +++ distrib/miniroot/install.sub        30 Mar 2017 10:44:01 -0000
> > > > @@ -264,13 +264,7 @@ diskinfo() {
> > > >         local _d
> > > >  
> > > >         for _d; do
> > > > -               make_dev $_d
> > > > -               echo -n "$_d: "
> > > > -               disklabel -dpg $_d 2>/dev/null |
> > > > -               sed     -e '/^label: /{s,,,;s/ *$//;s/^$/<no 
> > > > label>/;h;d;}' \
> > > > -                       -e '/.*# total bytes: \(.*\)/{s//(\1)/;H;}' \
> > > > -                       -e '$!d;x;s/\n/ /'
> > > > -               rm -f /dev/{r,}$_d?
> > > > +               sed -n "/^$_d/p" /var/run/dmesg.boot
> > > >         done
> > > >  }
> > > > 
> > > 
> > > Your proposition is good for the installer? I doubt it.
> > > 
> > > j.
> > 
> > AFAICT the function diskinfo() is only called once in the installer: if
> > you press ? a the prompt for the root disk. So my diff just changes the
> > output in this case, no other functionality is affected.
> > 
> > What causes your doubt?
> 
> Robert,
> 
> could we use something like this? From dmesg we can get current
> vendor, model, size plus serial if it does exist, 'sd0' could be grepped
> before sed or we could put variable inside sed itself:
> 
> sed -e '/^sd0 at.*: <[A-Z]*, \([^,]*\).*fixed *\(.*\)/{s//\1 <\2>/;s/< 
> *>$/<no serial>/;h;d;}' -e '/sd0: \([^,]*\).*/{s//(\1)/;H;}' -e '$!d;x;s/\n/ 
> /' /var/run/dmesg.boot
> SAMSUNG MZ7TE256 <naa.5002538844584d30> (244198MB)
> 
> If there's no serial it maybe could print this?
> 
> cat /var/run/dmesg.boot | sed 's/fixed.*/fixed/;' | sed -e '/^sd0 at.*: 
> <[A-Z]*, \([^,]*\).*fixed *\(.*\)/{s//\1 <\2>/;s/< *>$/<no serial>/;h;d;}' -e 
> '/sd0: \([^,]*\).*/{s//(\1)/;H;}' -e '$!d;x;s/\n/ /'
> SAMSUNG MZ7TE256 <no serial> (244198MB)
> 
> What do you think?
> 
> PS: sed is really hardcore :)
> 
> j.

Parsing dmesg output always tends to be fragile, but what about this?
Use whatever is enclosed in <> in the dmesg output for a disk and get
the size from disklabel.

VMware ESXi:
sd0 at scsibus1 targ 0 lun 0: <ATA, VMware Virtual S, 0000> SCSI3 0/direct 
fixed naa.5000c2994057dedf

QEMU using virtio:
sd0 at scsibus1 targ 0 lun 0: <VirtIO, Block Device, > SCSI3 0/direct fixed

My notebook:
sd0 at scsibus1 targ 0 lun 0: <ATA, MTFDDAK512MBF, LN01> SCSI3 0/direct fixed 
naa.500a07511210a1b8

>From an ppc imac:
wd0 at pciide0 channel 0 drive 0: <Samsung SSD 840 EVO 120GB>


sd0: VirtIO, Block Device, (10.0G)
sd0: ATA, VMware Virtual S, 0000 naa.5000c2994057dedf (51.2G)
sd0: ATA, MTFDDAK512MBF, LN01 naa.500a07511210a1b8 (512.0G)
wd0: Samsung SSD 840 EVO 120GB (120.0G)


Index: install.sub
===================================================================
RCS file: /cvs/src/distrib/miniroot/install.sub,v
retrieving revision 1.989
diff -u -p -p -u -r1.989 install.sub
--- install.sub 31 Mar 2017 18:36:49 -0000      1.989
+++ install.sub 2 Apr 2017 20:13:04 -0000
@@ -266,10 +266,11 @@ diskinfo() {
        for _d; do
                make_dev $_d
                echo -n "$_d: "
-               disklabel -dpg $_d 2>/dev/null |
-               sed     -e '/^label: /{s,,,;s/ *$//;s/^$/<no label>/;h;d;}' \
-                       -e '/.*# total bytes: \(.*\)/{s//(\1)/;H;}' \
-                       -e '$!d;x;s/\n/ /'
+               set --  $(sed -n "/^$_d at /{s/^.* <//;s/>.* \(naa\..*\)$/ 
\1/;s/> .*$//;p;}" \
+                               /var/run/dmesg.boot 2>/dev/null) \
+                       $(disklabel -dpg $_d 2>/dev/null |
+                               sed -n '/.*# total bytes: \(.*\)/s//(\1)/p')
+               echo "$*"
                rm -f /dev/{r,}$_d?
        done
 }
===================================================================
Stats: --- 4 lines 166 chars
Stats: +++ 5 lines 220 chars
Stats: 1 lines
Stats: 54 chars

-- 
-=[rpe]=-

Reply via email to