LINUX.ORG.RU

ntfs3: nvme0n1p9: ino=8e06b, «GenerationZero_F.exe» mmap(write) compressed not supported

 ,


0

1

Сжал NTFS папку с игрой, в надежде вдруг разница будет большой, разжимать потом не стал обратно.
Теперь игра в proton не запускается.
Вижу что из-за сжатия, но ntfs3 ведь должен поддерживать его в режиме чтения.

ntfs3: nvme0n1p9: ino=8e06b, «GenerationZero_F.exe» mmap(write) compressed not supported

Решение вижу банально сделав копирование с последующей заменой.
Как понять куда игра хочет сделать запись?
Можно как-то более изящно это исправить не копируя всё целиком?



Последнее исправление: drl (всего исправлений: 1)

ntfs-fuse для поддержки сжатия требуется отдельная либа (и, возможно, даже не одна, для разных версий нтфс). Подозреваю, что у ядрёной нтфс3 с этим примерно так же, если не хуже.

anonymous
()
Ответ на: комментарий от drl

Просто я в https://github.com/tuxera/ntfs-3g/wiki/NTFS-3G-FAQ прочитал следующее:

WHY CAN’T I READ OR MODIFY SOME FILES?

NTFS supports built-in, transparent compression and encryption of files and directories on the file system level. Reading and writing transparently compressed files are fully supported, but reading or writing encrypted files are not supported. Please note that compressed files, like .zip, .gz, .rar, etc, can be freely modified because they are compressed on the file, not on the file system level.

Глубже не копал. :)

dataman ★★★★★
()

Судя по сообщению он хочет mmap - отображение в память. Для exe-шников вполне стандартная хотелка. И очевидно эта операция с компрессией не может быть эффективной.

Можете попробовать для начала скопировать только GenerationZero_F.exe и посмотреть на что ещё ругнётся.

unDEFER ★★★★★
()
Ответ на: комментарий от unDEFER

Я уже скопировал его и другие файлы кроме archives_win64/ в tmpfs и обратно с заменой.
Дополнительно отключил на всех папках атрибут сжатия в Windows. Если кто знает как убрать атрибут из запущеной linux сообщите.
Это помогло.

drl
() автор топика
Ответ на: комментарий от drl
user_tmpfile=$(mktemp -t) && \
find /media/ntfs*/SteamLibrary*/steamapps/common/ -type f \( -iname '*.exe' -or -iname '*.dll' \) \
-exec rsync --perms {} $user_tmpfile \; \
-exec truncate -s 0 {} \; \
-exec setfattr --name=system.ntfs_attrib --value="0x00000020" {} \; \
-exec rsync --perms --remove-source-files $user_tmpfile {} \;
drl
() автор топика
Ответ на: комментарий от drl
#!/bin/bash

IFS=$'\n'

user_files=$(find /media/ntfs*/SteamLibrary*/ -type f \( -iname '*.exe' -or -iname '*.dll' \))
user_tmpfile=$(mktemp -t)

for f in ${user_files}
do
	if attr_hex=$(getfattr -e hex -n system.ntfs_attrib_be "${f}" 2>/dev/null | grep system.ntfs_attrib_be)
	then
		attr_hex=$(printf ${attr_hex} | sed '/system\.ntfs_attrib_be=/ { s/^[^0]*0[Xx]/0x/; q }; d')
		attr_hex_comperessed=$(($attr_hex | 0x800))

		if [[ $attr_hex -eq $attr_hex_comperessed ]]
		then
			attr_hex_decomperessed=$(printf '%#010x' $(($attr_hex & ~0x800)))
			rsync --perms "${f}" "${user_tmpfile}"
			truncate -s 0 "${f}"
			setfattr --name=system.ntfs_attrib_be --value="$attr_hex_decomperessed" "${f}"
			rsync --perms --remove-source-files "${user_tmpfile}" "${f}"
		fi
	fi
done
drl
() автор топика