IO Error in OS X 10.5.8
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
+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.
Does sudo cat /dev/disk1s1 > /dev/null report any errors?
it doesn't
Могу ли я обращаться на русском?
Да, можно на русском.
Вы пробовали другую USB флэшку или карту памяти?
Да, можно на русском.
Вы пробовали другую USB флэшку или карту памяти?
Да, пробовал два usb носителя, одну sdxc, и так же только что созданный и отформатированный образ диска, всё с одинаковыми ошибками
так же только что созданный и отформатированный образ диска
Вы имеете в виду образ в виде локального файла, без участия USB флэшек и карт памяти?
Вы используете Mac OS X для Intel или PowerPC?
локального файла
Да, именно так
PowerPC
PowerPC
Вероятно ошибка где-то в конвертации порядка байт.
Mac OS X 64-битная или 32-битная?
PowerPC
Вероятно ошибка где-то в конвертации порядка байт.
Mac OS X 64-битная или 32-битная?
32 битная, G4
Вероятно ошибка где-то в конвертации порядка байт.
Упомяну так же что использовал GCC14 из MacPorts, но при использовании с GCC4.2 из поставки Xcode те же симптомы
+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'.
В системном журнале есть какие-нибудь ошибки от mount.exfat?
Чтобы получить отладочный вывод прям в терминал можно запустить mount.exfat с ключом -d:
mount.exfat -d /dev/disk1s1 ~/exfat
В системном журнале есть какие-нибудь ошибки от mount.exfat?
В системном журнале ошибок от mount.exfat нет
Чтобы получить отладочный вывод прям в терминал можно запустить mount.exfat с ключом -d:
А если после монитрования с -d сделать в отдельном терминале ls ~/exfat, то какие-то сообщения в первом терминале (где запущен mount.exfat) появляются?
А если после монитрования с -d сделать в отдельном терминале
ls ~/exfat, то какие-то сообщения в первом терминале (где запущен mount.exfat) появляются?
unique: 2, success, outsize: 136
unique: 2, opcode: GETATTR (3), nodeid: 1, insize: 56, pid: 7222
getattr /
Воспроизвел проблему в qemu.
fuse-exfat возвращает успех, однако fuse что-то не нравится. Разбираюсь.
Воспроизвел проблему в qemu.
fuse-exfat возвращает успех, однако fuse что-то не нравится. Разбираюсь.
Спасибо за поддержку, мог бы я чем-либо помочь в дебаге?
мог бы я чем-либо помочь в дебаге?
Думаю нет, нужно разбираться в нюансах работы fuse. Но спасибо за отзывчивость!
Ошибка происходит из-за нарушения 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
Это сработало для меня. Спасибо! Закрыть issue или оставить до момента правки Makefile-ов?
Не закрывайте пожалуйста, чтобы проблема не потерялась.
The fix is merged into master as 75becf3606912b068c7020f351d78f81adfe15b9.