128 разделов — ограничение по умолчанию для GPT, и на практике, вероятно, неудобно использовать половину этого количества...
Сам Linux изначально также имел некоторые ограничения в пространстве имен устройств. Для /dev/sdX предполагается не более 15 разделов (sda — 8,0, sdb — 8,16 и т. д. ). Если разделов больше, они будут представлены с использованием 259,X, также известного как Block Extended Major.
Конечно, вы можете сделать больше разделов различными способами. Устройства Loop, LVM или даже GPT внутри GPT. Иногда это происходит естественным образом при передаче разделов в качестве блочных устройств виртуальным машинам, они видят раздел как виртуальный диск и разбивают его.
Просто не ожидайте, что такие разделы внутри разделов будут подхватываться автоматически.
Как заметил @fpmurphy1 в комментариях, я ошибался. :Вы можете изменить ограничение, используя gdisk
, expert menu
, resize partition table
. Это также можно сделать для существующих таблиц разделов, при условии, что в начале и в конце диска имеется нераспределенное пространство (и сектор размером 512 -байт для 4 дополнительных записей раздела ). Однако я не уверен, насколько широко это поддерживается; в parted
или других разделителях, которые я пробовал, похоже, нет такой возможности.
И самый высокий предел, который вы можете установить с помощью gdisk
, кажется, 65536
, но он прослушивается:
Expert command (? for help): s
Current partition table size is 128.
Enter new size (4 up, default 128): 65536
Value out of range
А потом...
Expert command (? for help): s
Current partition table size is 128.
Enter new size (4 up, default 128): 65535
Adjusting GPT size from 65535 to 65536 to fill the sector
Expert command (? for help): s
Current partition table size is 65536.
Эээ? Что бы вы ни сказали.
Но попробуйте сохранить эту таблицу разделов, и gdisk
застрянет в цикле на несколько минут.
Expert command (? for help): w
--- gdisk gets stuck here ---
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22253 root 20 0 24004 11932 3680 R 100.0 0.1 1:03.47 gdisk
--- unstuck several minutes later ---
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Your option? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/loop0.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
А вот что parted
говорит об успешно завершившейся операции:
# parted /dev/loop0 print free
Backtrace has 8 calls on stack:
8: /usr/lib64/libparted.so.2(ped_assert+0x45) [0x7f7e780181f5]
7: /usr/lib64/libparted.so.2(+0x24d5e) [0x7f7e7802fd5e]
6: /usr/lib64/libparted.so.2(ped_disk_new+0x49) [0x7f7e7801d179]
5: parted() [0x40722e]
4: parted(non_interactive_mode+0x92) [0x40ccd2]
3: parted(main+0x1102) [0x405f52]
2: /lib64/libc.so.6(__libc_start_main+0xf1) [0x7f7e777ec1e1]
1: parted(_start+0x2a) [0x40610a]
You found a bug in GNU Parted! Here's what you have to do:
Don't panic! The bug has most likely not affected any of your data.
Help us to fix this bug by doing the following:
Check whether the bug has already been fixed by checking
the last version of GNU Parted that you can find at:
http://ftp.gnu.org/gnu/parted/
Please check this version prior to bug reporting.
If this has not been fixed yet or if you don't know how to check,
please visit the GNU Parted website:
http://www.gnu.org/software/parted
for further information.
Your report should contain the version of this release (3.2)
along with the error message below, the output of
parted DEVICE unit co print unit s print
and the following history of commands you entered.
Also include any additional information about your setup you
consider important.
Assertion (gpt_disk_data->entry_count <= 8192) at gpt.c:793 in function
_parse_header() failed.
Aborted
Итак, parted
отказывается работать с GPT, имеющим более 8192 записей о разделах. Никто никогда так не делает, так что это должно быть коррумпировано, верно?
Вот что происходит, когда вы не придерживаетесь настроек по умолчанию.
Предполагая, что вы хотите запустить ant clean
внутри каждого каталога mainline
в иерархии каталогов, которую вы показываете:
for mainline in project/folder*/mainline/; do
( cd "$mainline" && ant clean )
done
Это приведет к перебору путей к каждому из mainline
каталогов. Для каждого такого пути тело цикла изменяется на этот каталог и запускается ant clean
внутри него.
Скобки вокруг команды в цикле запускают эти команды в оболочке sub -. Изменение рабочего каталога является локальным для этой подпрограммы -оболочки (, нам не нужно «выходить» из каталога, в который мы cd
попадаем ).
Если mainline
каталоги, которые вы показываете, являются единственными такими каталогами, вы можете использовать find
следующим образом:
find project -type d -name mainline -execdir sh -c 'cd mainline && ant clean' \;
Это найдет любой каталог с именем mainline
в каталоге project
или ниже него, а затем выполнит ant clean
в каждом из них. Действие -execdir
не является стандартным -, но обычно реализуется утилитой find
на большинстве Unix.
Вы также можете найти build.xml
файлы, которые ant
использует по умолчанию, и выполнить ant clean
в каждом каталоге mainline
, содержащем такой файл:
find project -type f -path '*/mainline/build.xml' -execdir ant clean \;
Делай так:
$ cd project/
$ find. -type d -name "mainline" -exec ls -l {} \;
Это найдет каталоги с именем «mainline» внутри текущей папки (project/ )и выполнит ls -l
для каждого из них