Peter Stuge posted on Sun, 12 Aug 2012 02:12:38 +0200 as excerpted:

> viv...@gmail.com wrote:
>> First problem udev/SD has is that it can't see all the file system
>> labels, for some reason it only see sda and sdb so it's able to partly
>> proceed in the boot sequence, mount / (root) but can't mount anything
>> else.
> 
> What software parses the filesystem labels when you boot with openrc?
> 
> (I ask because I never use labels myself.)

Short answer, mount and udev, and the kernel directly when fed that 
information for root= on the kernel commandline.  Openrc has basically 
nothing to do with it.  As such, I don't know what systemd's doing, but 
if it indeed is a systemd bug, it's obviously doing /something/ rather 
different... probably interacting in some unpredicted way with udev now 
that they're integrating it.

Slightly more detail, quoting the mount (8) manpage:

>>>>>
It is possible to indicate a block special device using its volume LABEL  
or UUID (see the -L and -U options below).

The recommended setup is to use LABEL=<label> or UUID=<uuid> tags rather 
than /dev/disk/by-{label,uuid} udev symlinks in the /etc/fstab file.
The tags are more readable, robust and portable. The mount(8) command 
internally uses udev symlinks, so use the symlinks in /etc/fstab has no 
advantage over LABEL=/UUID=. For more details see libblkid(3).

Note that mount(8) uses UUIDs as strings. The UUIDs from command line or
fstab(5) are not converted to internal binary representation. The string 
representation of the UUID should be based on lower case characters.

<<<<<

The implication of the "as strings, not converted to binary" in the last 
paragraph is that mount's simply doing a dumb string match against the 
appropriate /dev/disk/by-* symlink names and dereferencing the symlink 
after which it can proceed as usual if there's a match.  It's udev (and 
thus now systemd, since they're combining) that's actually doing the 
work, exposing the /dev/disk/by-* symlinks with the correct references.

As such, mount basically supports anything found in that location, 
including device hardware ID (combined with partition number where 
appropriate, listed in /dev/disk/by-id), the already mentioned filesystem 
LABEL (/dev/disk/by-label), PARTLABEL (GPT partitions have a partition 
label that's similar in function to the filesystem label, but set at gdisk 
time, not mkfs time, obviously this doesn't apply to legacy MBR 
partitioning), PARTUID, PATH (bus path, tho like traditional /dev/[hs]dX, 
this can be dynamic and the bus paths are longer and more obtuse for 
humans so there's generally little practical use for this one), and (as 
the manpage mentions, partition) UUID.

It is however worth noting that PARTLABEL at least is new enough that at 
least as of a couple months ago when I looked at it for my md/raid setup, 
while udev passed thru the PARTLABEL for physical devices, it was NOT 
doing so for partitioned md/raid devices.  (That mobo died and I don't 
have md/raid on the new system so I can't verify current kernel 3.6-rc1+ 
and udev-187-r3 PARTLABEL-on-md/raid behavior.)  So while people could 
setup their md/raid gpt partitions with partition-labels using gptfdisk 
(aka gdisk) or whatever, and I did so, only the ones on the physical 
disks showed up in udev, and at the time I was looking at it, I was 
running md/raid on virtually everything, so the feature was about useless 
for me.

But that does mean that if mdev or whatever creates similar /dev/disk/by-
*, that mount and friends should use it just as they would with udev, 
since all they're doing is a dumb string match and symlink deref.

It'a also worth noting that the kernel's root= line can take a number of 
these (I'm not sure if it can take them all), including partlabel, 
according to information someone posted on the btrfs list (which I was 
following at the time, before I decided btrfs was too unstable still and 
that I'd wait until next year to try again).  I was going to try it, but 
lost interest when I found I couldn't use it with fstab for my mdraid-
based gpt partitions anyway.  So all I can say is that it was reported to 
work on the btrfs list, and no one contradicted it, so...

>> a) SD does not re-calculate it's deptree/services when exiting from
>> rescue shell, it still try to start the "virtual" services as fstab
>> would have never modified, a reboot is needed
> 
> systemctl --system daemon-reload ?

I've not tried systemd yet nor have I yet researched it (I have the 
research vaguely scheduled for next year, sometime), but thanks to both 
of you for these details.  Based on past experience, I expect I'm 
collecting the pieces even tho I don't have context to assemble them in, 
but as a result, when I /do/ research it and get that context, the pieces 
I already have thanks to discussions like this, will fall into place, and 
it'll be far easier to get upto speed than it would have been had I tried 
going into it "cold turkey".

So while I could guess, I'll just shutup and listen for this part.

> I just work with the files on disk. The only time I use tools is if
> systemd is running and needs to get told about updates. I don't think
> there are any files that are not plain text, so I don't think any tools
> are actually required.

Useful to know. =:^)

> If there's a way to boot into a shell prompt, even if it is just bash
> running as pid 1, then any system can be fixed. It requires knowing a
> lot about how the system works though, so a lot about systemd if the
> system uses systemd. Ie. knowing what files to change how in order to
> accomplish desired results.

FWIW, I actually have a set of grub2 menu entries with init=/bin/bash, 
for troubleshooting. =:^)

But I think his point (valid or not) was that systemd's closing this 
avenue off as it's simply too monolithic to get information out of or to 
trial-start individual services even when not run as init, as is possible 
with openrc, for instance.

With openrc, if you boot with init=/bin/bash, then try to start an openrc 
initscript, it'll protest that it's not init and that results may not be 
as intended due to lack of dependency tracking, etc, but it'll let you 
override and try anyway, you just have to manage the service deps 
manually or deal with the fallout if you screw it up.

He appears to be saying that this doesn't work with systemd.  If it's not 
init, it refuses to do /anything/ with its unit-file initscript 
substitutes.  That /does/ sound like just the sort of complaint (of 
serveral) I've seen about systemd, but is it accurate?

If it is, then yes, booting to init=/bin/bash (or from live-rescue media) 
and troubleshooting systemd problems from there *IS* going to be more 
difficult than doing the same thing from openrc, because openrc has the 
ability to override and one-off, while if this is correct, openrc doesn't.

> I don't understand this at all. Even if we go with what you write, then
> I expect that some providers will start to offer an ecosystem of
> systemd-optimized experiences for those who want it - but I do not
> believe for a second that those would somehow be exclusive to other
> systems.

In all these systemd threads, someone posted a link to gregkh's take on 
gentoo as posted on google+.  In the comments that followed, Ted T'so and 
Kay S. had a rather interesting ping-pong in which one of them mentioned 
the concern that Red Hat and an init implementor for them had about all 
of this at the enterprise level.  For those interested in such things, 
it's worth going back and looking at that if you skipped it (either find 
the link here or just go back and look at gregkh's G+ from ~April).  I 
knew there were enterprise implications, but that was the first time I 
realized that RH wasn't necessarily 100% onboard with the full systemd 
thing, addressing it "upstream" since AFAIK Lennart is a RH employee as 
well.

>From that, it looks like they're more or less waiting for things to 
settle down as well, and they plan on some perhaps major patches being 
necessary for the first few RH releases with systemd.  Of course, even 
assuming those patches eventually make it upstream, Red Hat's release 
cycle is long enough and their paying customers generally conservative 
enough, that it may be some time before they actually have to worry about 
supporting systemd in a deployed release.

And of course, Ubuntu's continuing to stick to upstart for the time 
being, AFAIK.  And CentOS and ScientificLinux being RH offshoots, they'll 
follow RH.

In practice, I think that means that remote-hosted servers shouldn't have 
to worry about systemd issues for another couple years, anyway, gentoo or 
not.  Of course if they run fedora, it might be a problem rather sooner.  
But people running fedora should be used to dealing with such leading 
edge issues, so no big deal for them either, really.

And given enterprise support terms, I guess we're looking at something 
approaching a decade before folks are actually FORCED to systemd, by 
falling off the end of the support train.

Meanwhile, that gives plenty of time for other "entrprisish" parties to 
wait for redhat to decide what it's doing, then come up with their own 
solutions once a bit more about the ultimate target is known.  And until 
then, except for those choosing to run fedora or the like, the existing 
live-media-style remote rescue solutions should continue to work as they 
have.

And in particular for gentoo users with remote hosts to worry about, 
since it's already clear that for at least the near term (say a year or 
two), gentoo's going to continue to default to openrc, there shouldn't be 
a problem for at least /that/ long.  And by the time any such problem 
/were/ to appear, it's very likely that solutions for it will be 
available as well... or given the day jobs of various gentoo devs, 
there'd certainly be sufficient interest in continuing systemd-
alternative gentoo support, since they have similar issues themselves.

-- 
Duncan - List replies preferred.   No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master."  Richard Stallman


Reply via email to