Включите SCL python27, чтобы другие RPM могли его видеть

Разреженные файлы спроектированы так, чтобы быть прозрачными для пользовательского пространства: дыры создаются путем поиска прошлых неиспользуемых областей и читаются как блоки нулей. Их нельзя обнаружить с помощью стандартных API-интерфейсов пользовательского пространства, по крайней мере, пока — как указывал Stéphane Chazelas, по крайней мере Solaris и Linux поддерживают SEEK_DATA и SEEK_HOLE lseek(2) флаги, которые позволяют программам пользовательского пространства находить дыры, и эти флаги могут быть добавлены в POSIX в какой-то момент.

Это объясняет несовместимость между параметрами rsync' --sparse и --inplace: при записи в существующий файл portable , в существующих данных нельзя создавать дыры. --sparse работает путем перезаписи всего файла, пропуская (длинные) последовательности нулей, что приводит к разреженным файлам в операционных системах и файловых системах, которые их поддерживают.

В Linux вы можете получить информацию о разреженности файлов, используя fiemap ioctl и e2fsprogs filefrag(8) ; см. Подробную информацию о разреженных файлах в Linux . Что касается записи, вы можете использовать fallocate(2) (и удобную утилиту fallocate(1) ), чтобы пробить дыры в существующем файле, делая его разреженным, если дыры покрывают всю блоки. Поддержка зависит от файловой системы — в настоящее время эти операции поддерживают только XFS, btrfs, ext4 и tmpfs. Последние ядра (начиная с 4.1) и очень последние версии util-linux поддерживают вставку дыр в файлы, сдвигая содержимое после дыры (fallocate -i, введено в util-linux 2.30, который должен быть выпущен в ближайшее время).

Ваши последние два вопроса касаются операций с файловой системой, и я не уверен, что существует какой-либо общий системный вызов или ioctl для выполнения таких операций. reflink-совместимые файловые системы позволяют файлам делиться своим содержимым; это может быть достигнуто с помощью FICLONEи FICLONERANGE ioctl.

1
16.06.2016, 20:42
1 ответ

rpmbuild добавляет требования Python автоматически из используемой версии python. Таким образом, он добавлял python(abi)=2.7 в список требований RPM. Однако, при использовании python27, который использовал scl, в список требований добавлялся python27-python. Проблема была решена путем добавления строки

AutoReqProv: no

в файл spec в RPM. После этого машине, на которой был установлен rpm, не нужно было проверять требование python(abi), и вместо этого она проверяла, что python27-python был предоставлен.

0
28.01.2020, 01:15

Теги

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