Tiny Core Linux
Tiny Core Base => TCB Q&A Forum => Topic started by: wysiwyg on January 24, 2015, 06:14:47 PM
-
Good afternoon everyone! I was working on an extension for TC that utilizes the /dev/disk/by-id directory, but was troubled to see that TC does not appear to create these files. I quickly looked at another distro and copied the following two lines into a remastered boot image:
ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
ENV{DEVTYPE}=="partition", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"
However, I can't seem to get this directory structure to populate. Any thoughts on how I can accomplish this?
Thanks,
Dave
-
simple way to get labels:
blkid | grep -v loop
This will give you most anything you need pertaining to each device (label, uuid, format, etc.)
the "grep" portion simply disregards any extensions you might have loaded
-
Thanks for the response centralware. I use the by-id filenames to display a list to the user so they can identify which disk/partition they want to interact with. The filenames generated by the udev rule provide an easy way to do this. I don't think the blkid output is going to work as well. Any other thoughts?
Thanks,
Dave
-
Did you install the udev extensions?
-
Did you install the udev extensions?
Yes, udev is installed. Everything works as normal, I just can't get the script to populate the /dev/disk/by-id directory.
Dave
-
Dave@:
I'm not certain as to whether or not this will help; it sounds as though you may have something in play for another distribution, but if it's on the building block, the following will give you all of the details you should need regardless of what brand hdd you have (serial numbers in particular come in a variety of descriptors from SerialNo to Serial Number and so forth, thus should be tended to by this script.)
#!/bin/sh
blkid | grep -v /dev/loop >/tmp/.blkid
while read line
do
dev=`echo "$line" | awk -F: '{print $1}'`; raw=${dev:5}
lbl=`echo "$line" | awk -F "LABEL=\"" '{print $2}' | awk -F "\"" '{print $1}'`
uid=`echo "$line" | awk -F "UUID=\"" '{print $2}' | awk -F "\"" '{print $1}'`
typ=`echo "$line" | awk -F "TYPE=\"" '{print $2}' | awk -F "\"" '{print $1}'`
ser=`hdparm $dev -i 2>/dev/null | grep Serial | awk -F "Serial" '{print $2}' | awk -F= '{print $2}'`
ser=${ser// /}; #Remove space(s) if any
if [ ! "${raw:0:4}" == "zram" ]; then
echo "DEV: $dev"
echo "RAW: $raw"
echo "LBL: $lbl"
echo "TYP: $typ"
echo "UID: $uid"
echo "SER: $ser"
echo
fi
done < /tmp/.blkid
rm -f /tmp/.blkid
DEV = /dev/sd##
RAW = DEV without /dev/
LBL = Drive (Partition) Label
TYP = Format Type
SER = Serial Number
Note: This does not require any extensions to be loaded. The only thing I didn't include would be the pci/usb hardware source (ie: pci-xx-xx) which I'm guessing since this is end-user specific, will not be needed.
If you needed to know whether a device is removable, simply read /sys/block/[PARENT]/removable where 0=internal, 1+=removable and PARENT = sda if the DEV was sda1
Hope this helps!
-
There's a thread on this somewhere - I seem to remember that the full udev rules are required to populate /dev/disk/by-id, whereas the ones in core are edited for size.
-
@centralware thanks for all that info! I can certainly use it in other parts of projects though! Unfortunately for this project, the by-id info is more suitable.
@Juanito where would I find the 'full udev' rule for this?
Thanks,
Dave
-
http://www.tinycorelinux.net/5.x/x86/release/src/udev-174.tar.xz
-
@Juanito thanks for the link! I added the desired rule to TC and remastered, but now when I boot up I get:
udev[258]: failed to execute '/lib/udev/ata_id' 'ata_id --export /dev/sda': No such file or directory
udev[259]: failed to execute '/lib/udev/ata_id' 'ata_id --export /dev/sr0': No such file or directory
udev[279]: failed to execute '/lib/udev/scsi_id' 'scsi_id --export --whitelisted -d /dev/sda': No such file or directory
udev[311]: failed to execute '/lib/udev/scsi_id' 'scsi_id --export --whitelisted -d /dev/sr0': No such file or directory
I can see the /dev/sda* files and it appears that the /dev/disk/by-* files are being created, but still not populated...
Dave
-
'looks like you need the udev-extra extension
-
Looks like x86_64 doesn't have that package for either 6.x or 5.x.
Dave
-
indeed - I'll try to have a look at this in the next couple of days.
-
Thanks Juanito!
-
udev-extra posted in tc.6.x x86_64 repo
-
Thanks Juanito, that appears to have resolved all the boot error messages as well as populating the directories under /dev/disk/by-*. Thanks for your help!
Dave