The lsblk depends on /sys/dev/block/ symlinks, which appeared in
kernel 2.6.27. Users with old, or non-sysfs configured, kernel
got ealier message
lsblk: md0: failed to initialize sysfs handler
lsblk: xvda: failed to initialize sysfs handler
[...]
that I found a little too difficult to understand. This patch will
change the message to
lsblk: failed to access sysfs directory: /sys/dev/block: No such file or directory
and informs in manual page what could be reason to that.
[kzak@redhat.com: - use access() rather than opendir()]
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Karel Zak <kzak@redhat.com>
.SH NOTES
For the partitions are some information (e.g. queue attributes) inherited from
parental device.
+.PP
+The
+.B lsblk
+needs to be able to lookup sysfs path by major:minor, which is done
+done by using
+.BR /sys/dev/block .
+The block sysfs appeared in kernel 2.6.27 (October 2008). In case of
+problem with new enough kernel check that CONFIG_SYSFS was enabled at
+the time of kernel build.
.SH AUTHORS
.nf
Milan Broz <mbroz@redhat.com>
errx(EXIT_FAILURE, "%s %s", opts, _("options are mutually exclusive"));
}
+static void check_sysdevblock(void)
+{
+ if (access(_PATH_SYS_DEVBLOCK, R_OK) != 0)
+ err(EXIT_FAILURE, _("failed to access sysfs directory: %s"),
+ _PATH_SYS_DEVBLOCK);
+}
+
int main(int argc, char *argv[])
{
struct lsblk _ls;
}
}
+ check_sysdevblock();
+
if (!ncolumns) {
columns[ncolumns++] = COL_NAME;
columns[ncolumns++] = COL_MAJMIN;