parted создал раздел XFS, а я попросил ext4. Почему?

Сначала создайте сценарий-обертку, который переходит в каталог, указанный в первом (и единственном) аргументе командной строки, выполняет все необходимые настройки/инициализацию переменных/etc, а затем последовательно запускает ваши 10 сценариев с любыми необходимыми им аргументами.

Например, если каждый сценарий обрабатывает все файлы .jpg, .png и .gif в каталоге:

#! /bin/bash
# example-wrapper.sh

cd "$1"

script1 *.{jpg,png,gif}
script2 *.{jpg,png,gif}
script3 *.{jpg,png,gif}
script4 *.{jpg,png,gif}
script5 *.{jpg,png,gif}
script6 *.{jpg,png,gif}
script7 *.{jpg,png,gif}
script8 *.{jpg,png,gif}
script9 *.{jpg,png,gif}
script10 *.{jpg,png,gif}

Далее, используйте find для передачи списка каталогов в parallel.

find /path/to/parent/ -mindepth 1 -type -d -print0 | 
  parallel -0 -n 1 ./example-wrapper.sh

(опция -mindepth 1 в find исключает каталог верхнего уровня, т.е. сам родительский каталог)

По умолчанию parallel будет запускать один экземпляр ("задание") ./example-wrapper.sh для каждого имеющегося у вас ядра CPU. Каждый экземпляр получит ОДНО (-n 1) имя каталога. Как только одно задание завершается, запускается другое (если остались еще какие-либо задания для выполнения).

Это позволяет максимально использовать доступную мощность процессора, не позволяя заданиям конкурировать друг с другом за процессорное время.

Вы можете использовать опцию parallel в -j для настройки количества заданий, выполняемых одновременно. Для задач, требовательных к процессору, вероятно, подойдет значение по умолчанию - одно задание на ядро системы.

Если ваши задания не очень требовательны к процессору, но более привязаны к вводу-выводу, вам, возможно, потребуется запустить 2-3 задания на каждое ядро (в зависимости от размера входных файлов, скорости хранения данных и типа устройств хранения - например, SSD не страдают от задержки поиска, поэтому не будут замедлены несколькими процессами, ищущими данные по всему диску. Жесткие диски страдают от времени поиска и будут замедляться от того, что их заставляют беспорядочно искать данные по всему диску - дисковая буферизация/кэширование в Linux поможет, но не устранит проблему).

Если вы хотите выполнять другую работу (например, обычное использование рабочего стола) во время выполнения этих заданий, используйте -j, чтобы указать parallel использовать на одно или два ядра меньше, чем у вашей системы (например, -j 6 на 8-ядерной системе).

ПРИМЕЧАНИЕ: Настройка параллельных процессов - это тонкое искусство, и для получения наилучших результатов может потребоваться несколько экспериментов.

В любом случае, из man parallel:

--jobs N, -j N, --max-procs N, -P N

Количество рабочих мест. Параллельно выполняется до N заданий. 0 означает как можно больше. По умолчанию - 100%, при котором будет выполняться одно задание на ядро процессора.

Если --semaphore установлен, то по умолчанию это 1, что создает мьютекс.

Это действительно базовое и примитивное использование parallel. Он может делать гораздо больше. Подробности смотрите в man-странице.

BTW, xargs также имеет опцию -P для параллельного выполнения заданий. Для простого использования, подобного этому, не имеет особого значения, используете ли вы xargs -P или parallel. Но если ваши требования сложнее, используйте parallel.

parallel должен быть упакован для большинства дистрибутивов linux, в противном случае он доступен по адресу https://www.gnu.org/software/parallel/

3
15.08.2016, 06:37
1 ответ

Parted на самом деле не создает файловую систему. Он только создает раздел. Тип файловой системы, который вы передаете в mkpart , нигде не записывается.

Когда вы просите parted распечатать информацию, он смотрит на содержимое раздела. Похоже, что раньше у вас была файловая система xfs в разделе, начинающемся в том же месте, что и ваш текущий раздел номер 1. Поскольку вы еще не записали никакого содержимого в раздел, старое содержимое все еще там. Если файловая система xfs была менее 6001 ГБ, и если там действительно была файловая система, а не совпадение (например, начало файла образа файловой системы, которое оказалось точно в этой позиции), он все еще действителен и может быть смонтирован.

Так зачем вообще указывать тип файловой системы при запуске mkpart ? Воздействие зависит от формата раздела. В разделах GPT тип файловой системы используется для определения типа раздела. ntfs устанавливает тип раздела на GUID, используемый Windows, swap устанавливает тип раздела на GUID для свопа и т. Д. По умолчанию, для которого отображаются как xfs, так и ext4, установить GUID для данных Linux. Это один и тот же GUID независимо от типа файловой системы, что имеет смысл, поскольку GUID должен указывать, что хранится в разделе (например, файлы Linux), а не то, как они организованы.

3
27.01.2020, 21:22

Теги

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