exfat icon indicating copy to clipboard operation
exfat copied to clipboard

IO Error in OS X 10.5.8

Open Demine0 opened this issue 9 months ago • 22 comments

After the build, I got an io error., MacFUSE version 3.9.2 Used FUSE libraries during build - 2.6

+demine@Iris .../local/sbin % mount.exfat /dev/disk1s1 ~/exfat
FUSE exfat 1.4.0 (libfuse2)
kextload: /Library/Filesystems/osxfuse.fs/Contents/Extensions/10.5/osxfuse.kext loaded successfully
+(1) demine@Iris ~ % ls exfat
ls: exfat: Input/output error

Demine0 avatar Mar 12 '25 15:03 Demine0

+demine@Iris ~ % dumpexfat /dev/disk1s1
Volume label                  Movies
Volume serial number      0x83b0b897
FS version                       1.0
Sector size                      512
Cluster size                  131072
Sectors count              243707904
Free sectors                55955712
Clusters count                951954
Free clusters                 218577
First sector                       0
FAT first sector                 128
FAT sectors count               7552
First cluster sector            7680
Root directory cluster             4
Volume state                  0x0000
FATs count                         1
Drive number                    0x80
Allocated space                  77%

+demine@Iris ~ % exfatfsck /dev/disk1s1
exfatfsck 1.4.0
Checking file system on /dev/disk1s1.
File system version           1.0
Sector size                 512 bytes
Cluster size                128 KB
Volume size                 116 GB
Used space                   90 GB
Available space              27 GB
Totally 38 directories and 236 files.
File system checking finished. No errors found.

Demine0 avatar Mar 12 '25 15:03 Demine0

Does sudo cat /dev/disk1s1 > /dev/null report any errors?

relan avatar Mar 12 '25 18:03 relan

it doesn't

Demine0 avatar Mar 12 '25 19:03 Demine0

Могу ли я обращаться на русском?

Demine0 avatar Mar 12 '25 19:03 Demine0

Да, можно на русском.

Вы пробовали другую USB флэшку или карту памяти?

relan avatar Mar 13 '25 09:03 relan

Да, можно на русском.

Вы пробовали другую USB флэшку или карту памяти?

Да, пробовал два usb носителя, одну sdxc, и так же только что созданный и отформатированный образ диска, всё с одинаковыми ошибками

Demine0 avatar Mar 13 '25 10:03 Demine0

так же только что созданный и отформатированный образ диска

Вы имеете в виду образ в виде локального файла, без участия USB флэшек и карт памяти?

Вы используете Mac OS X для Intel или PowerPC?

relan avatar Mar 14 '25 08:03 relan

локального файла

Да, именно так

PowerPC

Demine0 avatar Mar 14 '25 08:03 Demine0

PowerPC

Вероятно ошибка где-то в конвертации порядка байт.

Mac OS X 64-битная или 32-битная?

relan avatar Mar 14 '25 18:03 relan

PowerPC

Вероятно ошибка где-то в конвертации порядка байт.

Mac OS X 64-битная или 32-битная?

32 битная, G4

Demine0 avatar Mar 14 '25 19:03 Demine0

Вероятно ошибка где-то в конвертации порядка байт.

Упомяну так же что использовал GCC14 из MacPorts, но при использовании с GCC4.2 из поставки Xcode те же симптомы

Demine0 avatar Mar 14 '25 21:03 Demine0

+demine@Iris ~/git/exfat (master ?) % ./configure
checking for a BSD-compatible install... /opt/local/bin/ginstall -c
checking whether sleep supports fractional seconds... yes
checking filesystem timestamp resolution... 2
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /opt/local/bin/gmkdir -p
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking xargs -n works... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether gcc accepts -g... yes
checking for gcc option to enable C11 features... none needed
checking whether gcc understands -c and -o together... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of gcc... gcc3
checking for ranlib... ranlib
checking for ar... ar
checking the archiver (ar) interface... ar
checking for gcc option to enable large file support... none needed
checking build system type... powerpc-apple-darwin9.8.0
checking host system type... powerpc-apple-darwin9.8.0
checking for pkg-config... /opt/local/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for libublio... no
checking for fuse3... no
checking for fuse >= 2.6... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating libexfat/Makefile
config.status: creating attrib/Makefile
config.status: creating dump/Makefile
config.status: creating fsck/Makefile
config.status: creating fuse/Makefile
config.status: creating label/Makefile
config.status: creating mkfs/Makefile
config.status: creating Makefile
config.status: creating libexfat/config.h
config.status: libexfat/config.h is unchanged
config.status: executing depfiles commands

И сборка -

+demine@Iris ~/git/exfat (master ?) % make
Making all in libexfat
make  all-am
depbase=`echo cluster.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
	gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT cluster.o -MD -MP -MF $depbase.Tpo -c -o cluster.o cluster.c &&\
	mv -f $depbase.Tpo $depbase.Po
depbase=`echo io.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
	gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT io.o -MD -MP -MF $depbase.Tpo -c -o io.o io.c &&\
	mv -f $depbase.Tpo $depbase.Po
depbase=`echo log.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
	gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT log.o -MD -MP -MF $depbase.Tpo -c -o log.o log.c &&\
	mv -f $depbase.Tpo $depbase.Po
depbase=`echo lookup.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
	gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT lookup.o -MD -MP -MF $depbase.Tpo -c -o lookup.o lookup.c &&\
	mv -f $depbase.Tpo $depbase.Po
depbase=`echo mount.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
	gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT mount.o -MD -MP -MF $depbase.Tpo -c -o mount.o mount.c &&\
	mv -f $depbase.Tpo $depbase.Po
depbase=`echo node.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
	gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT node.o -MD -MP -MF $depbase.Tpo -c -o node.o node.c &&\
	mv -f $depbase.Tpo $depbase.Po
depbase=`echo repair.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
	gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT repair.o -MD -MP -MF $depbase.Tpo -c -o repair.o repair.c &&\
	mv -f $depbase.Tpo $depbase.Po
depbase=`echo time.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
	gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT time.o -MD -MP -MF $depbase.Tpo -c -o time.o time.c &&\
	mv -f $depbase.Tpo $depbase.Po
depbase=`echo utf.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
	gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT utf.o -MD -MP -MF $depbase.Tpo -c -o utf.o utf.c &&\
	mv -f $depbase.Tpo $depbase.Po
depbase=`echo utils.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
	gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT utils.o -MD -MP -MF $depbase.Tpo -c -o utils.o utils.c &&\
	mv -f $depbase.Tpo $depbase.Po
rm -f libexfat.a
ar cr libexfat.a cluster.o io.o log.o lookup.o mount.o node.o repair.o time.o utf.o utils.o
ranlib libexfat.a
Making all in attrib
gcc -DHAVE_CONFIG_H -I. -I../libexfat  -I../libexfat   -g -O2 -MT exfatattrib-main.o -MD -MP -MF .deps/exfatattrib-main.Tpo -c -o exfatattrib-main.o `test -f 'main.c' || echo './'`main.c
mv -f .deps/exfatattrib-main.Tpo .deps/exfatattrib-main.Po
gcc  -g -O2   -o exfatattrib exfatattrib-main.o ../libexfat/libexfat.a
Making all in dump
gcc -DHAVE_CONFIG_H -I. -I../libexfat  -I../libexfat   -g -O2 -MT dumpexfat-main.o -MD -MP -MF .deps/dumpexfat-main.Tpo -c -o dumpexfat-main.o `test -f 'main.c' || echo './'`main.c
mv -f .deps/dumpexfat-main.Tpo .deps/dumpexfat-main.Po
gcc  -g -O2   -o dumpexfat dumpexfat-main.o ../libexfat/libexfat.a
Making all in fsck
gcc -DHAVE_CONFIG_H -I. -I../libexfat  -I../libexfat   -g -O2 -MT exfatfsck-main.o -MD -MP -MF .deps/exfatfsck-main.Tpo -c -o exfatfsck-main.o `test -f 'main.c' || echo './'`main.c
mv -f .deps/exfatfsck-main.Tpo .deps/exfatfsck-main.Po
gcc  -g -O2   -o exfatfsck exfatfsck-main.o ../libexfat/libexfat.a
Making all in fuse
gcc -DHAVE_CONFIG_H -I. -I../libexfat  -I../libexfat  -D_FILE_OFFSET_BITS=64 -D_DARWIN_USE_64_BIT_INODE -I/usr/local/include/osxfuse/fuse  -g -O2 -MT mount_exfat_fuse-main.o -MD -MP -MF .deps/mount_exfat_fuse-main.Tpo -c -o mount_exfat_fuse-main.o `test -f 'main.c' || echo './'`main.c
mv -f .deps/mount_exfat_fuse-main.Tpo .deps/mount_exfat_fuse-main.Po
gcc -D_FILE_OFFSET_BITS=64 -D_DARWIN_USE_64_BIT_INODE -I/usr/local/include/osxfuse/fuse  -g -O2   -o mount.exfat-fuse mount_exfat_fuse-main.o ../libexfat/libexfat.a -L/usr/local/lib -losxfuse
Making all in label
gcc -DHAVE_CONFIG_H -I. -I../libexfat  -I../libexfat   -g -O2 -MT exfatlabel-main.o -MD -MP -MF .deps/exfatlabel-main.Tpo -c -o exfatlabel-main.o `test -f 'main.c' || echo './'`main.c
mv -f .deps/exfatlabel-main.Tpo .deps/exfatlabel-main.Po
gcc  -g -O2   -o exfatlabel exfatlabel-main.o ../libexfat/libexfat.a
Making all in mkfs
gcc -DHAVE_CONFIG_H -I. -I../libexfat  -I../libexfat   -g -O2 -MT mkexfatfs-cbm.o -MD -MP -MF .deps/mkexfatfs-cbm.Tpo -c -o mkexfatfs-cbm.o `test -f 'cbm.c' || echo './'`cbm.c
mv -f .deps/mkexfatfs-cbm.Tpo .deps/mkexfatfs-cbm.Po
gcc -DHAVE_CONFIG_H -I. -I../libexfat  -I../libexfat   -g -O2 -MT mkexfatfs-fat.o -MD -MP -MF .deps/mkexfatfs-fat.Tpo -c -o mkexfatfs-fat.o `test -f 'fat.c' || echo './'`fat.c
mv -f .deps/mkexfatfs-fat.Tpo .deps/mkexfatfs-fat.Po
gcc -DHAVE_CONFIG_H -I. -I../libexfat  -I../libexfat   -g -O2 -MT mkexfatfs-main.o -MD -MP -MF .deps/mkexfatfs-main.Tpo -c -o mkexfatfs-main.o `test -f 'main.c' || echo './'`main.c
mv -f .deps/mkexfatfs-main.Tpo .deps/mkexfatfs-main.Po
gcc -DHAVE_CONFIG_H -I. -I../libexfat  -I../libexfat   -g -O2 -MT mkexfatfs-mkexfat.o -MD -MP -MF .deps/mkexfatfs-mkexfat.Tpo -c -o mkexfatfs-mkexfat.o `test -f 'mkexfat.c' || echo './'`mkexfat.c
mv -f .deps/mkexfatfs-mkexfat.Tpo .deps/mkexfatfs-mkexfat.Po
gcc -DHAVE_CONFIG_H -I. -I../libexfat  -I../libexfat   -g -O2 -MT mkexfatfs-rootdir.o -MD -MP -MF .deps/mkexfatfs-rootdir.Tpo -c -o mkexfatfs-rootdir.o `test -f 'rootdir.c' || echo './'`rootdir.c
mv -f .deps/mkexfatfs-rootdir.Tpo .deps/mkexfatfs-rootdir.Po
gcc -DHAVE_CONFIG_H -I. -I../libexfat  -I../libexfat   -g -O2 -MT mkexfatfs-uct.o -MD -MP -MF .deps/mkexfatfs-uct.Tpo -c -o mkexfatfs-uct.o `test -f 'uct.c' || echo './'`uct.c
mv -f .deps/mkexfatfs-uct.Tpo .deps/mkexfatfs-uct.Po
gcc -DHAVE_CONFIG_H -I. -I../libexfat  -I../libexfat   -g -O2 -MT mkexfatfs-uctc.o -MD -MP -MF .deps/mkexfatfs-uctc.Tpo -c -o mkexfatfs-uctc.o `test -f 'uctc.c' || echo './'`uctc.c
mv -f .deps/mkexfatfs-uctc.Tpo .deps/mkexfatfs-uctc.Po
gcc -DHAVE_CONFIG_H -I. -I../libexfat  -I../libexfat   -g -O2 -MT mkexfatfs-vbr.o -MD -MP -MF .deps/mkexfatfs-vbr.Tpo -c -o mkexfatfs-vbr.o `test -f 'vbr.c' || echo './'`vbr.c
mv -f .deps/mkexfatfs-vbr.Tpo .deps/mkexfatfs-vbr.Po
gcc  -g -O2   -o mkexfatfs mkexfatfs-cbm.o mkexfatfs-fat.o mkexfatfs-main.o mkexfatfs-mkexfat.o mkexfatfs-rootdir.o mkexfatfs-uct.o mkexfatfs-uctc.o mkexfatfs-vbr.o ../libexfat/libexfat.a
make[1]: Nothing to be done for `all-am'.

Demine0 avatar Mar 14 '25 22:03 Demine0

В системном журнале есть какие-нибудь ошибки от mount.exfat?

Чтобы получить отладочный вывод прям в терминал можно запустить mount.exfat с ключом -d:

mount.exfat -d /dev/disk1s1 ~/exfat

relan avatar Mar 15 '25 07:03 relan

В системном журнале есть какие-нибудь ошибки от mount.exfat?

В системном журнале ошибок от mount.exfat нет

Чтобы получить отладочный вывод прям в терминал можно запустить mount.exfat с ключом -d:

Image

Demine0 avatar Mar 15 '25 08:03 Demine0

А если после монитрования с -d сделать в отдельном терминале ls ~/exfat, то какие-то сообщения в первом терминале (где запущен mount.exfat) появляются?

relan avatar Mar 15 '25 09:03 relan

А если после монитрования с -d сделать в отдельном терминале ls ~/exfat, то какие-то сообщения в первом терминале (где запущен mount.exfat) появляются?

   unique: 2, success, outsize: 136
unique: 2, opcode: GETATTR (3), nodeid: 1, insize: 56, pid: 7222
getattr /

Demine0 avatar Mar 15 '25 09:03 Demine0

Воспроизвел проблему в qemu.

fuse-exfat возвращает успех, однако fuse что-то не нравится. Разбираюсь.

relan avatar Mar 15 '25 13:03 relan

Воспроизвел проблему в qemu.

fuse-exfat возвращает успех, однако fuse что-то не нравится. Разбираюсь.

Спасибо за поддержку, мог бы я чем-либо помочь в дебаге?

Demine0 avatar Mar 15 '25 14:03 Demine0

мог бы я чем-либо помочь в дебаге?

Думаю нет, нужно разбираться в нюансах работы fuse. Но спасибо за отзывчивость!

relan avatar Mar 15 '25 14:03 relan

Ошибка происходит из-за нарушения ABI между кодом реализации fuse и libexfat, потому что первый компилируется с добавлением флагов через pkg-config:

pkg-config fuse --cflags
-D_FILE_OFFSET_BITS=64 -D_DARWIN_USE_64_BIT_INODE -I/usr/local/include/osxfuse/fuse

А код libfuse компилируется без участия pkg-config. Всё бы ничего, ведь в configure.ac включена поддержка больших файлов, что, по идее, должно включать все нужные дефайны, но ChangeLog autoconf гласит:

2020-02-21  Paul Eggert  <[email protected]>

        Remove definition of _DARWIN_USE_64_BIT_INODE
        It’s not needed in currently-supported macOS versions, and was
        problematic anyway in MacOS X 10.5 which was the only version that
        could use it.  Problem reported by Peter Eisentraut in:
        https://lists.gnu.org/r/bug-autoconf/2020-02/msg00004.html
        * lib/autoconf/specific.m4 (AC_SYS_LARGEFILE):
        Don’t define _DARWIN_USE_64_BIT_INODE.

Из-за этого при очередном обновлении autoconf в сборках fuse-exfat для Mac OS X 10.5 нарушилась бинарная совместимость структур, включающих i-node, между кодом fuse/main.c и libfuse.

Думаю как это починить.

В качестве воркэраунда попробуйте пожалуйста вызвать configure с нужным дефайном и пересобрать fuse-exfat:

./configure CFLAGS=-D_DARWIN_USE_64_BIT_INODE
make clean
make

relan avatar Mar 16 '25 09:03 relan

Это сработало для меня. Спасибо! Закрыть issue или оставить до момента правки Makefile-ов?

Demine0 avatar Mar 16 '25 14:03 Demine0

Не закрывайте пожалуйста, чтобы проблема не потерялась.

relan avatar Mar 16 '25 15:03 relan

The fix is merged into master as 75becf3606912b068c7020f351d78f81adfe15b9.

relan avatar Jun 11 '25 10:06 relan