Skip to content

IO Error in OS X 10.5.8 #201

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
Demine0 opened this issue Mar 12, 2025 · 22 comments
Open

IO Error in OS X 10.5.8 #201

Demine0 opened this issue Mar 12, 2025 · 22 comments

Comments

@Demine0
Copy link

Demine0 commented Mar 12, 2025

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
Copy link
Author

Demine0 commented Mar 12, 2025

+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.

@relan
Copy link
Owner

relan commented Mar 12, 2025

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

@Demine0
Copy link
Author

Demine0 commented Mar 12, 2025

it doesn't

@Demine0
Copy link
Author

Demine0 commented Mar 12, 2025

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

@relan
Copy link
Owner

relan commented Mar 13, 2025

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

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

@Demine0
Copy link
Author

Demine0 commented Mar 13, 2025

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

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

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

@relan
Copy link
Owner

relan commented Mar 14, 2025

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

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

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

@Demine0
Copy link
Author

Demine0 commented Mar 14, 2025

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

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

PowerPC

@relan
Copy link
Owner

relan commented Mar 14, 2025

PowerPC

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

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

@Demine0
Copy link
Author

Demine0 commented Mar 14, 2025

PowerPC

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

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

32 битная, G4

@Demine0
Copy link
Author

Demine0 commented Mar 14, 2025

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

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

@Demine0
Copy link
Author

Demine0 commented Mar 14, 2025

+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'.

@relan
Copy link
Owner

relan commented Mar 15, 2025

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

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

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

@Demine0
Copy link
Author

Demine0 commented Mar 15, 2025

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

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

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

Image

@relan
Copy link
Owner

relan commented Mar 15, 2025

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

@Demine0
Copy link
Author

Demine0 commented Mar 15, 2025

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

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

@relan
Copy link
Owner

relan commented Mar 15, 2025

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

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

@Demine0
Copy link
Author

Demine0 commented Mar 15, 2025

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

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

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

@relan
Copy link
Owner

relan commented Mar 15, 2025

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

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

@relan
Copy link
Owner

relan commented Mar 16, 2025

Ошибка происходит из-за нарушения 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  <eggert@cs.ucla.edu>

        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

@Demine0
Copy link
Author

Demine0 commented Mar 16, 2025

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

@relan
Copy link
Owner

relan commented Mar 16, 2025

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants