Виртуальные машины Linux в облаке (например, Azure) - использовать LVM или нет?

Труба, как и любой файл, представляет собой поток текста (точнее, поток байтов). Основные строительные блоки Unix, как правило, просты. Взаимодействие между процессами в основном основано на неструктурированных данных. Операционная система не предоставляет канал связи с несколькими потоками, помеченными именем файла. Если программам это нужно, они должны организовать свой собственный - и отдельные каналы, по одному для каждого потока, были бы наиболее естественной реализацией.

Если program2 и program3 действуют независимо на каждый поток, запустите по одной их копии для каждого из файлов. Чтобы запустить их последовательно, используйте цикл оболочки. Как и pipe, цикл - это одна из возможностей shell для связывания программ. Чтобы указать program3, куда поместить вывод, обычно program3 пишет на стандартный вывод и использует конструкцию перенаправления в оболочке, чтобы направить вывод в файл. Оболочка предоставляет некоторые базовые конструкции манипулирования строками для построения имен файлов; здесь это просто конкатенация.

for x in *.txt; do
  program1 "$x" | program2 | program3 >"folder/$x"
done

Если программы не требуют больших затрат на ввод-вывод, но требовательны к процессору, и у вас несколько процессоров, вы можете захотеть выполнять их параллельно. С достаточно новыми инструментами GNU вы можете использовать xargs для параллельного запуска программ. Передайте количество CPU в вашей системе в качестве аргумента команде -P. Поскольку команда, которую должен выполнить xargs, является конвейером, вам нужно сделать так, чтобы она вызывала оболочку.

find -maxdepth 1 -name '*.txt' -print0 |
xargs -0 -n 1 -P 4 sh -c 'program1 "$1" | program2 | program3 >"$0/$1"' "folder"

Вы можете использовать GNU parallel вместо xargs, чтобы позволить ему автоматически определить количество CPU в вашей системе.

parallel sh -c 'program1 "$1" | program2 | program3 >"$0/$1"' "folder" ::: *.txt

Если вам нужно, чтобы один экземпляр программы2 и программы3 обрабатывал несколько файлов, вам нужно будет разработать эти программы с пользовательским интерфейсом для получения нескольких труб в качестве входа. Стандартного способа сделать это не существует. Один из методов - позволить им вызывать программу, которая обеспечивает их вход. Это было бы похоже на то, как xargs и parallel указывают, какую программу вызвать для обработки их вывода.

0
23.05.2018, 15:33
2 ответа

LVM only también conlleva una penalización insignificante por su uso, y podría valer la pena usarlo en ciertos escenarios, especialmente en particiones de base de datos grandes.

No obstante, en las particiones del sistema operativo, estoy completamente de acuerdo en que es posible que no lo necesite.

También tenga en cuenta que si está utilizando un sistema de archivos que permite el crecimiento en línea, es posible que no necesite usar LVM nuevamente, en otro tipo de escenarios.

Por ejemplo, los sistemas de archivos xfs, y también como señala correctamente @sourcejedi, ext4 y btrfs.

En cuanto a Azure, si necesita arrancar en el lateral , solo requiere un poco de planificación. Configure una partición extra pequeña de recuperación/arranque entre 200 -500 MB con una imagen de rescate en una VM en el momento de la instalación.

0
28.01.2020, 02:43

How is this handled or recommended to be handled in Azure VMs if the same situation arose? (if a partition in the middle needing additional space, on a non-LVM disk)

Mirando los resultados de la búsqueda, diría que Azure recomienda que no haga eso.

Siempre que aparezcan imágenes en la nube, coloque la partición raíz al final del disco. Supongo que la idea es poner la partición de datos (s )en un disco separado (s ).

Por ej. este enlace muestra una imagen de CentOS del mercado de Azure en este formato y también sugiere que se probó el mismo procedimiento con una imagen de Ubuntu. También explica que puede usar fdisken un sistema en ejecución para eliminar la partición del sistema operativo y volver a crear -para reflejar el nuevo espacio disponible. Es decir. esto no requiere arrancar en un disco GPARTED. Luego debe reiniciar, antes de poder cambiar el tamaño del sistema de archivos dentro de la partición. Puede haber otras formas de hacer esto también.

https://blogs.msdn.microsoft.com/cloud_solution_architect/2016/05/24/step-by-step-how-to-resize-a-linux-vm-os-disk-in-azure-arm/

2
28.01.2020, 02:43

Теги

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