Перенаправление сценария stdin в файл в фоновом режиме

  Found volume group "fedora_desktop-ld77fgg" using metadata type lvm2

# vgchange -a y fedora_desktop--ld77fgg

Когда команда vgscanсообщает вам имя VG, вы можете использовать его как есть с командой vgchange-вам не нужно удваивать тире.

A mini-summary of Logical Volume Manager (LVM):

  • In order to use LVM, you can initialize partitions or entire disks as LVM Physical Volumes (PVs)...
  • ... and you use one or more PVs to create a Volume Group (VG), which is basically treated as an uniform pile of raw storage space, which you can then freely slice into...
  • ..one or more LVM Logical Volumes (LVs). A single LV can span more than one PV: even if it's made out of many disjoint pieces, a filesystem placed on it will see it as a single logically continuous unit of storage. And a LV can be migrated from one place to another within the VG, while the LV is mounted and in use.

Вам нужно будет сделать это только с путями :, так как формат /dev/mapper/<VG name>-<LV name>, любые неизмененные одиночные дефисы в пути сделают его двусмысленным :любая программа, обрабатывающая имя, не будет знать, какой тире является частью имени и отделяет части <VG name>и <LV name>друг от друга.


Похоже, вы думали, что порядок контейнеров был:

disk -> partition -> LUKS wrapper -> PV -> LV -> filesystem

но отсутствие необходимости указывать фразу-пароль при попытке запуска cryptsetup luksOpenи сообщение об ошибке при попытке монтирования /dev/fedora_desktop-ld77fgg/03предполагают, что фактический порядок вещей:

disk -> partition -> PV -> LV -> LUKS wrapper -> filesystem

Чтобы убедиться в этом, проверьте, действительно ли cryptsetup luksOpen /dev/mapper/loop0p3 mylvmвы создали /dev/mapper/mylvmустройство или нет. Я подозреваю, что он мог вообще ничего не делать.

Вместо этого теперь следует выполнить:

# cryptsetup luksOpen /dev/fedora_desktop-ld77fgg/03 myfs
<answer the passphrase prompt>
# mount /dev/mapper/myfs /tmp/hej
1
12.10.2020, 16:51
1 ответ
cat - 3>"$in" >&3 &

Если вы запустите это из сценария, стандартный ввод catбудет перенаправлен с /dev/null.

Если вы запустите его из интерактивной оболочки, catбудет остановлен сигналом SIGTTIN.

В любом случае он ничего не запишет в канал "$in".

Если это часть скрипта, "решение" (пугает кавычками, потому что мне не совсем понятно, что вы пытаетесь сделать )— это "сохранить" стандартный ввод с exec [fd]<&0перенаправлением, и затем перенаправьте ввод фонового процесса с этого [fd]. Сравните:

echo yes | sh -c 'cat & sleep 1'

, который ничего не записывает в стандартный вывод, с

echo yes | sh -c 'exec 5<&0; cat <&5 & sleep 1'

что подойдет.

1
18.03.2021, 22:58

Теги

Похожие вопросы