[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Problems with hfsprogs on G5 Power Macs



Dear all,

I experienced some major problems with hfsprogs on G5 Power Macs.

Once in a while (already seen multiple times on 11,2 and 7,3 type Power Macs) the OS refuses to mount the NewWorld bootstrap - or simply HFS - partition that hosts the GRUB installation at startup in read-write mode. Trying to check the HFS with `fsck.hfs` always leads to segmentation faults (details below).

So one actually cannot repair that issue from a G5 - or maybe not even any issue with an HFS at all, because the same also happens when trying to check a clean HFS with `fsck.hfs`. The result is that an existing GRUB installation can no longer be upgraded on a G5 as soon as someone hits that problem. Actually I'm also unsure if my HFS problems were created by an unclean shutdown at all.

One could solve this by recreating the HFS partition from scratch and restoring the contents (incl. file blessing and file types (i.e. `tbxi`)). Or maybe by rewriting a `dd`ed image from a clean HFS - if you have one at hand. Trying to repair the partition with `fsck.hfs` from a Mac mini G4 (via SATA to USB adapter) worked for me also. But all these workarounds are unhandy to the least.

The last changelog entry for `hfsprogs` is already from 2013 and the used source code from Apple seems to be even older than that (e.g. check the used version 332.25 against the versions available from [1]). There seems to be some recent progress in Arch Linux (following the discussion on [2]) but I'm unsure if this will also apply to NewWorld Power Macs. So I dare to say that we have a situation with hfsprogs similar to the situation we have with yaboot, maybe even worse, as a critical functionality just doesn't work on G5 Power Macs.

[1]: https://opensource.apple.com/source/diskdev_cmds/
[2]: https://aur.archlinux.org/packages/hfsprogs/

Cheers,
Frank

****

```
root@powermac-g5-2:~# dmesg | grep hfs
[ 16.234586] hfs: filesystem was not cleanly unmounted, running fsck.hfs is recommended. mounting read-only.

root@powermac-g5-2:~# fsck.hfs -d /dev/sda2
** /dev/sda2
	Using cacheBlockSize=32K cacheTotalBlock=1024 cacheSize=32768K.
** Checking HFS volume.
Segmentation fault

root@powermac-g5-2:~# strace fsck.hfs -d /dev/sda2
execve("/sbin/fsck.hfs", ["fsck.hfs", "-d", "/dev/sda2"], 0x7ffff6dd0670 /* 17 vars */) = 0
brk(NULL)                               = 0x2d210000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=38472, ...}) = 0
mmap(NULL, 38472, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fffbb2d0000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/lib/powerpc64-linux-gnu/libbsd.so.0", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\2\1\0\0\0\0\0\0\0\0\0\0\3\0\25\0\0\0\1\0\0\0\0\0\2\345h"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=133368, ...}) = 0
mmap(NULL, 200880, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fffbb290000 mmap(0x7fffbb2b0000, 131072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x10000) = 0x7fffbb2b0000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/lib/powerpc64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\2\1\3\0\0\0\0\0\0\0\0\0\3\0\25\0\0\0\1\0\0\0\0\0\36\326\300"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2046080, ...}) = 0
mmap(NULL, 2119632, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fffbb080000
mprotect(0x7fffbb250000, 65536, PROT_NONE) = 0
mmap(0x7fffbb260000, 196608, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1d0000) = 0x7fffbb260000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/lib/powerpc64-linux-gnu/librt.so.1", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\2\1\3\0\0\0\0\0\0\0\0\0\3\0\25\0\0\0\1\0\0\0\0\0\1\367\370"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=69392, ...}) = 0
mmap(NULL, 134872, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fffbb050000 mmap(0x7fffbb060000, 131072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0) = 0x7fffbb060000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/lib/powerpc64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\2\1\3\0\0\0\0\0\0\0\0\0\3\0\25\0\0\0\1\0\0\0\0\0\3\344H"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=237672, ...}) = 0
mmap(NULL, 281120, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fffbb000000 mmap(0x7fffbb030000, 131072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x20000) = 0x7fffbb030000
close(3)                                = 0
mprotect(0x7fffbb260000, 131072, PROT_READ) = 0
mprotect(0x7fffbb030000, 65536, PROT_READ) = 0
mprotect(0x7fffbb060000, 65536, PROT_READ) = 0
mprotect(0x7fffbb2b0000, 65536, PROT_READ) = 0
mprotect(0x10030000, 65536, PROT_READ)  = 0
mprotect(0x7fffbb330000, 65536, PROT_READ) = 0
munmap(0x7fffbb2d0000, 38472)           = 0
set_tid_address(0x7fffbb344250)         = 4837
set_robust_list(0x7fffbb344260, 24)     = 0
rt_sigaction(SIGRTMIN, {sa_handler=0x7fffbb03e3b8, sa_mask=[], sa_flags=SA_SIGINFO}, NULL, 8) = 0 rt_sigaction(SIGRT_1, {sa_handler=0x7fffbb03e3d0, sa_mask=[], sa_flags=SA_RESTART|SA_SIGINFO}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
stat("/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/dev/sda2", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 2), ...}) = 0
stat("/dev/sda2", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 2), ...}) = 0
stat("/dev/sda2", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 2), ...}) = 0
openat(AT_FDCWD, "/dev/sda2", O_RDONLY) = 3
brk(NULL)                               = 0x2d210000
brk(0x2d240000)                         = 0x2d240000
fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 0), ...}) = 0
openat(AT_FDCWD, "/dev/sda2", O_WRONLY) = 4
write(1, "** /dev/sda2\n", 13** /dev/sda2
)          = 13
write(1, "\tUsing cacheBlockSize=32K cacheT"..., 65 Using cacheBlockSize=32K cacheTotalBlock=1024 cacheSize=32768K.
) = 65
mmap(NULL, 33554432, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fffb9000000
fstat(3, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 2), ...}) = 0
ioctl(3, BLKGETSIZE64, [10000384])      = 0
_llseek(3, 0, [0], SEEK_SET)            = 0
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 32768) = 32768
_llseek(3, 9994240, [9994240], SEEK_SET) = 0
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 32768) = 6144
write(1, "** Checking HFS volume.\n", 24** Checking HFS volume.
) = 24
_llseek(3, 65536, [65536], SEEK_SET)    = 0
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 32768) = 32768
_llseek(3, 98304, [98304], SEEK_SET)    = 0
read(3, "\0\0\0\"\0\0\0\36\377\1\0\4\0\0\6\0\0\0\1@\0\0\4\0\0\0\0\0\0\0\0\0"..., 32768) = 32768 --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_BNDERR, si_addr=0x8001b901eff4} ---
+++ killed by SIGSEGV +++
Segmentation fault

root@powermac-g5-2:~# dmesg | grep hfs
[ 1593.639820] fsck.hfs[4814]: unhandled signal 11 at 000080019b19eff4 nip 000000001001e740 lr 0000000010022bd4 code 3 [ 1663.526515] fsck.hfs[4833]: unhandled signal 11 at 00008001ad9aeff4 nip 000000001001e740 lr 0000000010022bd4 code 3
```


Reply to: