Это самая странная вещь, которую я когда-либо видел (на самом деле, у нее есть хорошее объяснение).
Я создал код C для вывода списка разделов и его собственных типов:
char *get_luks_partition(void) {
blkid_dev dev;
blkid_cache cache;
blkid_dev_iterate iter;
const char *devname = NULL;
char *ret = NULL;
const char *type = NULL;
if (blkid_get_cache(&cache, NULL))
return NULL;
blkid_probe_all(cache);
iter = blkid_dev_iterate_begin(cache);
while (!blkid_dev_next(iter, &dev)) {
devname = blkid_dev_devname(dev);
type = blkid_get_tag_value(cache, "TYPE", devname);
if (type)
printf("dev: %s type: %s\n", devname, type);
if (type && !strcmp(type, "crypto_LUKS")) {
ret = (char *) devname;
break;
}
}
blkid_dev_iterate_end(iter);
return ret;
}
Он не показывает устройство / раздел и тип, когда я работаю как обычный пользователь.Итак, я пытаюсь работать от имени пользователя root и наконец вижу устройства, разделы и типы.И когда я возвращаюсь к пользователю, я могу видеть тот же вывод, что и root, если я снова запускаю.Смотрите последовательность:
$ ./main
dev: /dev/sr0 type: udf
$ sudo ./main
dev: /dev/vda1 type: vfat
dev: /dev/vda2 type: xfs
dev: /dev/vda3 type: crypto_LUKS
$ ./main
dev: /dev/vda1 type: vfat
dev: /dev/vda2 type: xfs
dev: /dev/vda3 type: crypto_LUKS
Кто-нибудь знает, что происходит?