Neue Dateisysteme für die Fritzbox (HFS+, ZFS)

TheInfinity

Neuer User
Mitglied seit
24 Apr 2007
Beiträge
9
Punkte für Reaktionen
0
Punkte
0
Moinsn,

nachdem ich eine FritzBox 7270 zum Spielen bekommen habe (Hach - manchmal sind Vertragsverlängerungen was feines) habe ich nun einen nicht ganz so leicht zu realisierenden Plan. Aufgrund von akutem Speichermangel brauche ich eine 1TB HDD für mein MacBook Pro. Da ich recht viel mit Grafikbearbeitung zu tun habe, schliesse ich die Festplatte an eine eSATA Karte an, da ich dort eine deutlich bessere Performance habe als im normalen Netzwerk.

Nun besitzt meine Freundin auch ein Notebook - und sie möcht ab und an an die Musik, welche auf der 1TB HDD liegt. Deswegen bin ich auf die Idee gekommen, ich könne die Fritzbox ja so konfigurieren, dass sie für meine Freundin die Daten via NFS von meinem Laptop bereitstellt. Wenn mein Laptop aber weg ist, könnte man ja einfach die Platte an den USB Anschluss meiner 7270 anschliessen und die Fritzbox könnte von dort aus die Daten holen.

An sich ist das alles kein Problem, ein bisschen Bashscripting plus ein debian auf einem USB Stick via chroot und das alles ist durchaus machbar. Es gibt nur ein Problem wo ich selbst auch noch nicht sonderlich viel Erfahrung habe: Das hfs+ Kernelmodul. In einigen Threads wurde das bereits angesprochen, aber dort wurden munter das Protokoll afp://, das Dateisystem HFS+ und so einige andere Dinge vor allem in Bezug auf TimeMaschine durcheinandergeworfen, weswegen ich einen neuen Thread eröffne.

Also die Frage: Wie integriere ich ein neues Kernelmodul in den Kernel? Vielleicht auch für die Zukunft - wie integriere ich FUSE + ZFS? Hat irgendwer damit schon mal Erfahrungen gemacht? Bzw. gibt es irgendwo ein Tutorial, wie man in Freetz neue Kernelmodule integriert? Zum Beispiel ein paar mehr Lese-Links als das da, was mich dann leider doch überfordert, da ich eher Anwender mit Konsolen (= bash scripting etc) Kenntnissen bin.

Vielen Dank schon einmal :)
Infinity
 
Hi.
Kernelmodule kannst du mit "make kernel-menuconfig" kompilieren. Um die dann ins Image zu bekommen musst du kernel/Config.in entsprechend erweitern und die Module im "make menuconfig" auswählen. HFS und HFS+ sollte somit möglich sein.

MfG Oliver
 
Lässt sich der AVM-Kermel denn inzwischen für die FB7270 aus den Quellen übersetzen? Mein letzter Informationsstand war, dass das z.Z. nicht klappt?!
 
Sooo ... einige Versuche später ...

Ich nutze Freetz SVN, welches die .58er Firmware unterstützt. Bei meinem Problem habe ich zunächst make menuconfig gemacht und die Konfiguration (debootstrap etc) gespeichert, dann make kernel-menuconfig und dort hfs und hfsplus ausgewählt.

Danach habe ich die Config.in (naiverweise?) um folgende Zeilen erweitert:
Code:
config FREETZ_MODULE_ext3
        bool "ext3.ko"
        select FREETZ_MODULE_jbd
        select FREETZ_MODULE_mbcache
        default n

config FREETZ_MODULE_hfs
        bool "hfs.ko"
        default n

config FREETZ_MODULE_hfsplus
        bool "hfsplus.ko"
        default n

config FREETZ_MODULE_ext2
        bool "ext2.ko"
        select FREETZ_MODULE_mbcache
        default n

War das richtig?

Danach habe ich mit make menuconfig die beiden zusätzlichen Module ausgewählt und mit make alles compiliert was auch ohne Fehler funktionierte. Das Image habe ich dann auf die Fritzbox gespielt, auf der Fritzbox gibt es nun hfs und hfsplus.ko:
Code:
/var/mod/root # ls -la /lib/modules/2.6.19.2/kernel/fs/hfsplus
drwxr-xr-x    2 root     root           27 Aug 23  2008 .
drwxr-xr-x   14 root     root          136 Aug 23  2008 ..
-rwxr-xr-x    1 root     root       107421 Aug 23  2008 hfsplus.ko
/var/mod/root # ls -la /lib/modules/2.6.19.2/kernel/fs/hfs    
drwxr-xr-x    2 root     root           23 Aug 23  2008 .
drwxr-xr-x   14 root     root          136 Aug 23  2008 ..
-rwxr-xr-x    1 root     root        75526 Aug 23  2008 hfs.ko
/var/mod/root # ls -la /lib/modules/2.6.19.2/kernel/fs    
drwxr-xr-x   14 root     root          136 Aug 23  2008 .
drwxr-xr-x    4 root     root           31 Jul 16  2008 ..
drwxr-xr-x    2 root     root           24 Aug 23  2008 cifs
drwxr-xr-x    2 root     root           24 Jul 16  2008 ext2
drwxr-xr-x    2 root     root           24 Aug 23  2008 ext3
drwxr-xr-x    2 root     root           23 Jul 16  2008 fat
drwxr-xr-x    2 root     root           24 Aug 23  2008 fuse
drwxr-xr-x    2 root     root           23 Aug 23  2008 hfs
drwxr-xr-x    2 root     root           27 Aug 23  2008 hfsplus
drwxr-xr-x    2 root     root           25 Jul 16  2008 isofs
drwxr-xr-x    2 root     root           23 Aug 23  2008 jbd
drwxr-xr-x    2 root     root           25 Jul 16  2008 jffs2
-rwxr-xr-x    1 root     root        10735 Aug 23  2008 mbcache.ko
drwxr-xr-x    2 root     root           89 Jul 16  2008 nls
drwxr-xr-x    2 root     root           24 Jul 16  2008 vfat

Wenn ich nun einen USB Stick mit einer leeren HFS+ Partition (welcher in Ubuntu gemountet werden kann) in die Fritzbox reinstecke kommt folgendes:
Code:
Jan  1 01:22:08 eventadd[1479]: EVENT(131): USB-Ger?t 005, Klasse 'storage', angesteckt
Jan  1 01:22:16 eventadd[1570]: EVENT(140): Partition unter uStor01 eingebunden
Jan  1 01:22:16 eventadd[1585]: EVENT(142): Der USB-Massenspeicher 5 enth?lt kein unterst?tztes Dateisystem oder hat eine ung?ltige Partitionstabelle. (Das Ger?t hat den folgenden Typ: 0951:1601)
Jan  1 01:22:26 tr069starter[1574]: tr069starter: /var/media/ftp/uStor01/tr069start.config not found - exit

Wenn ich nun versuche das Gerät zu mounten kriege ich:
Code:
/var/mod/root # mkdir /var/tmp/hfsplus
/var/mod/root # mount -t hfsplus /dev/hda1 /var/tmp/hfsplus/
mount: mounting /dev/hda1 on /var/tmp/hfsplus/ failed: No such device

Nun die Preisfrage - was ist an den Modulen falsch? Fehlt ggf. irgendwas noch in der Kernelconfiguration? Oder wo ist ein anderer Ansatzpunkt, wo ich zumindst eine aussagekräftige Fehlermeldung bekomme?

Vielen Dank schon einmal für eure Geduld
Infinity
 
Zuletzt bearbeitet:
Du könntest den mount mal mit strace aufrufen. Aber wahrscheinlich siehst du da auch nur, dass der mount stecken bleibt. Oder probier mal mit "replace kernel".

MfG Oliver
 
Uff ich habe aus versehen die Zeile mit der Fehlermeldung bei dem mount Befehl grade nicht kopiert. Scheinbar existiert /dev/sda1 nämlich nicht einmal, siehe oben.

Replace kernel ... ? Was sollte das bringen? Bzw wo überhaupt? Ich habe das in der menuconfig nicht gefunden ...

strace habe ich leider nicht mit im Image, jedoch sollte das angesichts der Fehlermeldung egal sein ... ?
 
Sag mal, hast du die Module auch geladen? Ich glaub nur das eincompilieren reicht nicht
 
Code:
modprobe hfs
modprobe hfsplus
lsmod
MfG Oliver
 
Humpf. Mein Fehler. Sorry.

Also ... nun habe ich hfs und hfsplus geladen:
Code:
/var/mod/root # lsmod | grep hfs
hfsplus                83945  0 
hfs                    54334  0

Nun bekomme ich folgenden Fehler:
Code:
/var/mod/root # mount -t hfsplus /dev/sda1 /var/media/ftp/uStor01/
mount: mounting /dev/sda1 on /var/media/ftp/uStor01/ failed: Invalid argument

sda1 existiert aber und ist ein hfsplus Volume, welches von Ubuntu und Debian gemountet werden kann. Auf dder Fritzbox kann /dev/sda1 auch gelesen werden:
Code:
/var/mod/root # cat /dev/sda1
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 
??=`???xh??=`????x?%(ve.0.indexHead)ve.0.indexUpdates*ve.0.indexIds+ve.0.indexGroups,ve.0.indexPostings-ve.0.indexTermIds.ve.0.indexPositions/ve.0.indexPositionTable0ve.0.indexDirectory1ve.0.indexCompactDirectory2ve.0.indexArraystore.db4	.store.db6
         ournalLive7ournalExclusion8
                                    ournalSync90000000002b66c7b;.shadowIndexGroups<ve.0.shadowIndexHead=ve.0.shadowIndexTermIds>ve.0.shadowIndexPositionTable?ve.0.shadowIndexArrays@live.0.shadowIndexCompactDirectoryAve.0.shadowIndexDirectortore.updatesD.indexPostingsF.indexPositionsH.indexDirectoryI.indexCompactDirecto.indexArraysP
ournalAttr.2T.indexHeadQ.shadowIndexHeadR	.DS_StoreS
             Neuer OrdnerU	permStore?
                                          ?
                                           ?
Z	4	~	.		???^:??r@??p(??@???T,????V
VolumeConfig.plistStoresN$43FA5E37-556B-4B87-A166-0810DE83EFA7&??6???_???_???7cc.indexArraysJ???G???G???G???Gcc???2l2}4.indexCompactDirectoryI???G???G???G???Gcc.indexGroups ???7???7???7???7cc????Gcc2h 
?1?
   .indexHeadP???G???_???_???Gcc??2
.indexIds???7???7???7???7cc??1&.indexPositionsF???G???G???G???Gcc??2e$.indexPost?ngsD???G???G???G???Gcc??d2b?l?
 p
  ?
   ?
    ^
     <
      ?
?
?	f	?

                 `
B	????vd
bD
  Ohne Titel 1".indexUpdates0ve.0.indexPositiontore.db(???f>2?".indexUpdates???7???G???G???7cc??,.shadowIndexGroups;???G???G???G???Gcc??2L(.shadowIndexHeadQ???G???G???G???Gcc??2~
ournalAttr.2S???V???_???_???Vcc???2?&ournalExclusion7???8???8???8???8cc??
                                                                         ournalLive6???8???_???_???8cc??2?
                          ournalSync8???8???G???G???8cc??*ve.0.indexArrays2???7???_???_???Gcc??2>ve.0.indexCompactDirectory1???7???_???_???7cc??20ve.0.indexDirectory0???7???_???_???Fcc??  2*ve.0.indexGroups+???7???7???7???7cc??
?2&ve.0.indexHead(???7???_???_???7cc??2-$ve.0.indexIds*???7???7???7???7cc??2
??
 r
  H
?????rP*?
         Ohne Titel 1???0???X???X???8ccA?
                                         Ohne Titel 1	.DS_StoreR???V???[???[???_cc??@2?
???0???0???0???0CmP@@$.Spotlight-V100???6???6???6???6ccA.Trashes???6???_???_???6ccB?@
     Neuer OrdnerT???X???X???X???XccA?0HFS+ Private Data???0@P@@HFS+ Private Da.TrashesPrivate Directory Data
.fseventsd&0000000002b66c7b9???????_???_????cc??/2?"fseventsd-uuid???6???_???_???_cc??$1?fseventsd-uuid.Spotlight-V10Store-V1???6???6???6???6ccAStore-V1Stores??d6???6???6???6ccA?*VolumeConfig.plist???6???6???6???6cc??\1??|p
 ?
d

0ve.0.indexPositions.???7???_???_???7cc??28ve.0.indexPositionTable/???7???_???_???7cc?? 2.ve.0.indexPostings,???7???_???_???7cc??2,ve.0.indexTermIds-???7???_???_???7cc?? 2,ve.0.indexUpdates)???7???_???_???7cc???2?6ve.0.shadowIndexArrays????G???G???G???Gcc??2NJlive.0.shadowIndexCompactDirectory@???G???G???G???Gcc?2^<ve.0.shadowIndexDirectoryA???G???G???G???Gcc2_6ve.0.shadowIndexGroupsB???G???G???G???Gcc??2`2ve.0.shadowIndexHead<???G???G???G???Gcc??2MDve.0.shadowIndexPositionTable>???G???G???G???Gcc??8ve.0.shadowIndexTermIds=???G???G???G???Gcc??	permStor"U???_???_???_???_cc??42?fT
 ?
tore.updatesC???G???_???_???Gcc??G???7cc???
                                 2?
ndexState.indexUpdates
.indexGroups?j?
?	????fH*
               ???^8

Der Mountbefehl ist an sich ja richtig und funktioniert ja auch, wenn ich ein fat32 oder ein ext3 Volume am USB Port habe. Aber warum meckert mount über ein Invalid argument?

Vielen Dank für Eure Hilfe
Infinity
 
was sagt denn der gute alte fstyp zu /dev/sda1 ?
erkennt fstyp das format?

eben noch was gefunden...könnte das relevant sein??
http://r-goetz.de/linux/tips/hfs.html
Code:
Linux kann zur Zeit nur HFS mounten, nicht aber HFS+. Zum Mounten von HFS-Volumes gibt es zwei Möglichkeiten:
 
Es gibt mitlerweile ein Kernelmodul namens hfsplus, und andere Linuxe - übrigens auch OpenWRT - können das auch lesen.

fstyp erkennt den Dateityp nicht:
Code:
/var/mod/root # fstyp /dev/sda1
/var/mod/root #

Irgendwie habe ich das Gefühl, dass irgendetwas bei der Zuordnung zu /dev/sda1 schiefläuft. Immerhin geht der USB Stick auf anderen Linux-Systemen, des weiteren meckert mount ja über ein Invalid Argument. Ich werde einmal die Firmware neu compilieren - diesmal mit strace - und schauen, was er da zu meckern hat.

Wurde denn bei der Zuordnung der Devicenodes irgendwas modifiziert bei Freetz?

Viele Grüße & vielen Dank
Infinity

PS: Ich lese grade, dass replace kernel nun auch für die 7270 verfügbar ist. Meint ihr, dass es auf einen Versuch ankäme?

PPS: strace Ergebnisse:
Code:
/var/mod/root # strace mount -t hfsplus /dev/sda1 /var/media/ftp/uStor01/
execve("/bin/mount", ["mount", "-t", "hfsplus", "/dev/sda1", "/var/media/ftp/uStor01/"], [/* 140 vars */]) = 0
svr4_syscall()                          = -1 ERRNO_4090 (Unknown error 4090)
open("/mod/lib/libc.so.0", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/lib/libc.so.0", O_RDONLY)        = 3
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaae000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\10\0\1\0\0\0\260\272\0\0004\0\0\0"..., 4096) = 4096
old_mmap(NULL, 462848, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aabd000
old_mmap(0x2aabd000, 370340, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x2aabd000
old_mmap(0x2ab28000, 4452, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x5b000) = 0x2ab28000
old_mmap(0x2ab2a000, 15096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2ab2a000
close(3)                                = 0
mprotect(0x2aabd000, 370340, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
munmap(0x2aaae000, 4096)                = 0
mprotect(0x2aabd000, 370340, PROT_READ|PROT_EXEC) = 0
ioctl(0, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
getuid()                                = 0
brk(0)                                  = 0x4a3b6c
brk(0x4a4b6c)                           = 0x4a4b6c
brk(0x4a5000)                           = 0x4a5000
getuid()                                = 0
geteuid()                               = 0
stat64(0x7fe5f361, 0x7fe5e978)          = 0
mount("/dev/sda1", "/var/media/ftp/uStor01/", "hfsplus"..., MS_SILENT, ""...) = -1 EINVAL (Invalid argument)
ioctl(2147483647, TIOCNXCL, 0x7fe5e838) = -1 EBADF (Bad file descriptor)
brk(0x4a6000)                           = 0x4a6000
write(2, "mount: mounting /dev/sda1 on /va"..., 78mount: mounting /dev/sda1 on /var/media/ftp/uStor01/ failed: Invalid argument
) = 78
exit(-1)                                = ?
/var/mod/root #

Dazu gehörig ein ltrace:
Code:
/var/mod/root # ltrace mount -t hfsplus /dev/sda1 /var/media/ftp/uStor01/
__uClibc_main(0x40a394, 5, 0x7f814084, 0x406400, 0x480340 <unfinished ...>
_init(0, 0x7f814338, -1, 0x406400, 0x2ab30720)   = 0x2ab299fc
main(5, 0x7f814084, 0x7f81409c, 0x406400, 0x2ab30720 <unfinished ...>
lbb_prepare(0x48076c, 0x7f814084, 0x7f81409c, 0x406400, 0x4a9ad0 <unfinished ...>
__errno_location()                               = 0x2ab29a20
<... lbb_prepare resumed> )                      = 0x4a28f8
bb_basename(0x7f814350, 0x7f814084, 0x7f81409c, 0x406400, 0x4a9ad0 <unfinished ...>
strrchr("mount", '/')                            = NULL
<... bb_basename resumed> )                      = 0x7f814350
getuid()                                         = 0
bsearch("mount", 0x0048affc, 150, 1, 0x00409d5c <unfinished ...>
strcmp("mount", "mkdir")                         = 4
strcmp("mount", "strings")                       = -6
strcmp("mount", "ps")                            = -3
strcmp("mount", "nohup")                         = -1
strcmp("mount", "more")                          = 3
strcmp("mount", "nc")                            = -1
strcmp("mount", "mv")                            = -7
strcmp("mount", "mount")                         = 0
<... bsearch resumed> )                          = 0x0048b04d
mount_main(5, 0x7f814084, 150, 1, 0x4a9ad0 <unfinished ...>
strdup("")                                       = 0x004a3b78
sanitize_env_if_suid(0x4a3b78, 0x4867d9, 0x4a4b6c, 0x4a3b70, 0 <unfinished ...>
getuid()                                         = 0
geteuid()                                        = 0
<... sanitize_env_if_suid resumed> )             = 0
getopt32(0x7f814084, 0x486cec, 0x7f813e90, 0x7f813e8c, 0 <unfinished ...>
memset(0x7f813a8c, '\000', 924)                  = 0x7f813a8c
getopt_long(5, 0x7f814084, "o:t:rwanfvsi", 0x0048a324, NULL <unfinished ...>
strcmp("-t", "--")                               = 71
<... getopt_long resumed> )                      = 116
getopt_long(5, 0x7f814084, "o:t:rwanfvsi", 0x0048a324, NULL <unfinished ...>
getopt_long(5, 0x7f814084, "o:t:rwanfvsi", 0x0048a324, NULL) = -1
<... getopt32 resumed> )                         = 2
strchr("", ',')                                  = NULL
strcasecmp("loop", "")                           = 108
strlen("loop")                                   = 4
strcasecmp("defaults", "" <unfinished ...>
strcasecmp("defaults", "")                       = 100
strlen("defaults" <unfinished ...>
strlen("defaults")                               = 8
strcasecmp("noauto", "" <unfinished ...>
strcasecmp("noauto", "")                         = 110
strlen("noauto" <unfinished ...>
strlen("noauto")                                 = 6
strcasecmp("sw", "" <unfinished ...>
strcasecmp("sw", "")                             = 115
strlen("sw" <unfinished ...>
strlen("sw")                                     = 2
strcasecmp("swap", "" <unfinished ...>
strcasecmp("swap", "")                           = 115
strlen("swap" <unfinished ...>
strlen("swap")                                   = 4
strcasecmp("_netdev", "" <unfinished ...>
strcasecmp("_netdev", "")                        = 95
strlen("_netdev" <unfinished ...>
strlen("_netdev")                                = 7
strcasecmp("nosuid", "" <unfinished ...>
strcasecmp("nosuid", "")                         = 110
strlen("nosuid" <unfinished ...>
strlen("nosuid")                                 = 6
strcasecmp("suid", "" <unfinished ...>
strcasecmp("suid", "")                           = 115
strlen("suid" <unfinished ...>
strlen("suid")                                   = 4
strcasecmp("dev", "" <unfinished ...>
strcasecmp("dev", "")                            = 100
strlen("dev" <unfinished ...>
strlen("dev")                                    = 3
strcasecmp("nodev", "" <unfinished ...>
strcasecmp("nodev", "")                          = 110
strlen("nodev" <unfinished ...>
strlen("nodev")                                  = 5
strcasecmp("exec", "" <unfinished ...>
strcasecmp("exec", "")                           = 101
strlen("exec" <unfinished ...>
strlen("exec")                                   = 4
strcasecmp("noexec", "" <unfinished ...>
strcasecmp("noexec", "")                         = 110
strlen("noexec" <unfinished ...>
strlen("noexec")                                 = 6
strcasecmp("sync", "" <unfinished ...>
strcasecmp("sync", "")                           = 115
strlen("sync" <unfinished ...>
strlen("sync")                                   = 4
strcasecmp("dirsync", "" <unfinished ...>
strcasecmp("dirsync", "")                        = 100
strlen("dirsync" <unfinished ...>
strlen("dirsync")                                = 7
strcasecmp("async", "" <unfinished ...>
strcasecmp("async", "")                          = 97
strlen("async" <unfinished ...>
strlen("async")                                  = 5
strcasecmp("atime", "" <unfinished ...>
strcasecmp("atime", "")                          = 97
strlen("atime" <unfinished ...>
strlen("atime")                                  = 5
strcasecmp("noatime", "" <unfinished ...>
strcasecmp("noatime", "")                        = 110
strlen("noatime" <unfinished ...>
strlen("noatime")                                = 7
strcasecmp("diratime", "" <unfinished ...>
strcasecmp("diratime", "")                       = 100
strlen("diratime" <unfinished ...>
strlen("diratime")                               = 8
strcasecmp("nodiratime", "" <unfinished ...>
strcasecmp("nodiratime", "")                     = 110
strlen("nodiratime" <unfinished ...>
strlen("nodiratime")                             = 10
strcasecmp("loud", "" <unfinished ...>
strcasecmp("loud", "")                           = 108
strlen("loud" <unfinished ...>
strlen("loud")                                   = 4
strcasecmp("bind", "" <unfinished ...>
strcasecmp("bind", "")                           = 98
strlen("bind" <unfinished ...>
strlen("bind")                                   = 4
strcasecmp("move", "" <unfinished ...>
strcasecmp("move", "")                           = 109
strlen("move" <unfinished ...>
strlen("move")                                   = 4
strcasecmp("shared", "" <unfinished ...>
strcasecmp("shared", "")                         = 115
strlen("shared" <unfinished ...>
strlen("shared")                                 = 6
strcasecmp("slave", "" <unfinished ...>
strcasecmp("slave", "")                          = 115
strlen("slave" <unfinished ...>
strlen("slave")                                  = 5
strcasecmp("private", "" <unfinished ...>
strcasecmp("private", "")                        = 112
strlen("private" <unfinished ...>
strlen("private")                                = 7
strcasecmp("unbindable", "" <unfinished ...>
strcasecmp("unbindable", "")                     = 117
strlen("unbindable" <unfinished ...>
strlen("unbindable")                             = 10
strcasecmp("rshared", "" <unfinished ...>
strcasecmp("rshared", "")                        = 114
strlen("rshared" <unfinished ...>
strlen("rshared")                                = 7
strcasecmp("rslave", "" <unfinished ...>
strcasecmp("rslave", "")                         = 114
strlen("rslave" <unfinished ...>
strlen("rslave")                                 = 6
strcasecmp("rprivate", "" <unfinished ...>
strcasecmp("rprivate", "")                       = 114
strlen("rprivate" <unfinished ...>
strlen("rprivate")                               = 8
strcasecmp("runbindable", "" <unfinished ...>
strcasecmp("runbindable", "")                    = 114
strlen("runbindable" <unfinished ...>
strlen("runbindable")                            = 11
strcasecmp("ro", "" <unfinished ...>
strcasecmp("ro", "")                             = 114
strlen("ro" <unfinished ...>
strlen("ro"Error: call nesting too deep!
 <unfinished ...>
<... strlen resumed> )                           = 2
strcasecmp("rw", "" <unfinished ...>
strcasecmp("rw", ""Error: call nesting too deep!
 <unfinished ...>
<... strcasecmp resumed> )                       = 114
strlen("rw" <unfinished ...>
strlen("rw"Error: call nesting too deep!
 <unfinished ...>
<... strlen resumed> )                           = 2
strcasecmp("remount", "" <unfinished ...>
strcasecmp("remount", ""Error: call nesting too deep!
 <unfinished ...>
<... strcasecmp resumed> )                       = 114
strlen("remount" <unfinished ...>
strlen("remount"Error: call nesting too deep!
 <unfinished ...>
<... strlen resumed> )                           = 7
strlen("" <unfinished ...>
strlen(""Error: call nesting too deep!
 <unfinished ...>
<... strlen resumed> )                           = 0
xrealloc(0, 2, 0x486e7d, 0x2ab14bf0, 0x4a9ad0 <unfinished ...>
realloc(NULL, 2Error: call nesting too deep!
 <unfinished ...>
<... xrealloc resumed> )                         = 0x4a3b88
strcpy(0x004a3b88, "")                           = 0x004a3b88
strcmp("hfsplus", "auto")                        = 7
strcmp("hfsplus", "cifs")                        = 5
strcmp("hfsplus", "nfs")                         = -6
mount(0x7f814361, 0x7f81436b, 0x7f814359, 32768, 0x4a3b88Error: call nesting too deep!
Error: call nesting too deep!
 <unfinished ...>
__errno_location(Error: call nesting too deep!
 <unfinished ...>
<... mount resumed> )                            = -1
bb_perror_msg(0x486ccc, 0x7f814361, 0x7f81436b, 1, 0 <unfinished ...>
strerror(22Error: call nesting too deep!
 <unfinished ...>
strlen("Invalid argument"Error: call nesting too deep!
 <unfinished ...>
bb_verror_msg(0x486ccc, 0x7f8139f4, 0x2ab2cdb0, 1, 0x4a9ad0Error: call nesting too deep!
 <unfinished ...>
vasprintf(0x7f813998, 0x486ccc, 0x7f8139f4, 1, 0x4a9ad0Error: call nesting too deep!
 <unfinished ...>
__errno_location(Error: call nesting too deep!
Error: call nesting too deep!
Error: call nesting too deep!
 <unfinished ...>
memset(0x7f8138b0, '\000', 9Error: call nesting too deep!
Error: call nesting too deep!
Error: call nesting too deep!
 <unfinished ...>
strlen(""Error: call nesting too deep!
 <unfinished ...>
xrealloc(0x4a3bb8, 79, 5192, 0x4a4c20, 0x4a9ad0Error: call nesting too deep!
 <unfinished ...>
memmove(0x4a3bbf, 0x4a3bb8, 52, 0x4a4bb8, 0x4a9ad0Error: call nesting too deep!
 <unfinished ...>
strcpy(0x004a3bb8, "mount"Error: call nesting too deep!
 <unfinished ...>
fflush(0x2ab2851cError: call nesting too deep!
 <unfinished ...>
full_write(2, 0x4a3bb8, 78, 0x4a3bbf, 0x4a9ad0Error: call nesting too deep!
 <unfinished ...>
safe_write(2, 0x4a3bb8, 78, 0x4a3bbf, 0x4a9ad0Error: call nesting too deep!
 <unfinished ...>
write(2, "mount: mounting /dev/sda1 on /va"..., 78Error: call nesting too deep!
Error: call nesting too deep!
mount: mounting /dev/sda1 on /var/media/ftp/uStor01/ failed: Invalid argument
Error: call nesting too deep!
 <unfinished ...>
<... bb_perror_msg resumed> )                    = 0
<... mount_main resumed> )                       = -1
exit(-1 <unfinished ...>
_fini(0x2ab28600, 0x480000, 9296, 0x4a3c08, 0x2ab30720) = 0x2ab29a00
+++ exited (status 255) +++
/var/mod/root #

Im Vergleich dazu ein mounten eines fat volumes:
Code:
/var/mod/root # strace mount -t vfat /dev/sda1 /var/media/ftp/uStor01/
execve("/bin/mount", ["mount", "-t", "vfat", "/dev/sda1", "/var/media/ftp/uStor01/"], [/* 140 vars */]) = 0
svr4_syscall()                          = -1 ERRNO_4090 (Unknown error 4090)
open("/mod/lib/libc.so.0", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/lib/libc.so.0", O_RDONLY)        = 3
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaae000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\10\0\1\0\0\0\260\272\0\0004\0\0\0"..., 4096) = 4096
old_mmap(NULL, 462848, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aabd000
old_mmap(0x2aabd000, 370340, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x2aabd000
old_mmap(0x2ab28000, 4452, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x5b000) = 0x2ab28000
old_mmap(0x2ab2a000, 15096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2ab2a000
close(3)                                = 0
mprotect(0x2aabd000, 370340, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
munmap(0x2aaae000, 4096)                = 0
mprotect(0x2aabd000, 370340, PROT_READ|PROT_EXEC) = 0
ioctl(0, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
getuid()                                = 0
brk(0)                                  = 0x4a3b6c
brk(0x4a4b6c)                           = 0x4a4b6c
brk(0x4a5000)                           = 0x4a5000
getuid()                                = 0
geteuid()                               = 0
stat64(0x7fb6f361, 0x7fb6e978)          = 0
mount("/dev/sda1", "/var/media/ftp/uStor01/", "vfat"..., MS_SILENT, ""...) = 0
exit(0)                                 = ?
/var/mod/root #

Auch dazu der ltrace:
Code:
/var/mod/root # ltrace mount -t vfat /dev/sda1 /var/media/ftp/uStor01/
__uClibc_main(0x40a394, 5, 0x7fe70084, 0x406400, 0x480340 <unfinished ...>
_init(0, 0x7fe70338, -1, 0x406400, 0x2ab30720)   = 0x2ab299fc
main(5, 0x7fe70084, 0x7fe7009c, 0x406400, 0x2ab30720 <unfinished ...>
lbb_prepare(0x48076c, 0x7fe70084, 0x7fe7009c, 0x406400, 0x4a9ad0 <unfinished ...>
__errno_location()                               = 0x2ab29a20
<... lbb_prepare resumed> )                      = 0x4a28f8
bb_basename(0x7fe70353, 0x7fe70084, 0x7fe7009c, 0x406400, 0x4a9ad0 <unfinished ...>
strrchr("mount", '/')                            = NULL
<... bb_basename resumed> )                      = 0x7fe70353
getuid()                                         = 0
bsearch("mount", 0x0048affc, 150, 1, 0x00409d5c <unfinished ...>
strcmp("mount", "mkdir")                         = 4
strcmp("mount", "strings")                       = -6
strcmp("mount", "ps")                            = -3
strcmp("mount", "nohup")                         = -1
strcmp("mount", "more")                          = 3
strcmp("mount", "nc")                            = -1
strcmp("mount", "mv")                            = -7
strcmp("mount", "mount")                         = 0
<... bsearch resumed> )                          = 0x0048b04d
mount_main(5, 0x7fe70084, 150, 1, 0x4a9ad0 <unfinished ...>
strdup("")                                       = 0x004a3b78
sanitize_env_if_suid(0x4a3b78, 0x4867d9, 0x4a4b6c, 0x4a3b70, 0 <unfinished ...>
getuid()                                         = 0
geteuid()                                        = 0
<... sanitize_env_if_suid resumed> )             = 0
getopt32(0x7fe70084, 0x486cec, 0x7fe6fe90, 0x7fe6fe8c, 0 <unfinished ...>
memset(0x7fe6fa8c, '\000', 924)                  = 0x7fe6fa8c
getopt_long(5, 0x7fe70084, "o:t:rwanfvsi", 0x0048a324, NULL <unfinished ...>
strcmp("-t", "--")                               = 71
<... getopt_long resumed> )                      = 116
getopt_long(5, 0x7fe70084, "o:t:rwanfvsi", 0x0048a324, NULL <unfinished ...>
getopt_long(5, 0x7fe70084, "o:t:rwanfvsi", 0x0048a324, NULL) = -1
<... getopt32 resumed> )                         = 2
strchr("", ',')                                  = NULL
strcasecmp("loop", "")                           = 108
strlen("loop")                                   = 4
strcasecmp("defaults", "" <unfinished ...>
strcasecmp("defaults", "")                       = 100
strlen("defaults" <unfinished ...>
strlen("defaults")                               = 8
strcasecmp("noauto", "" <unfinished ...>
strcasecmp("noauto", "")                         = 110
strlen("noauto" <unfinished ...>
strlen("noauto")                                 = 6
strcasecmp("sw", "" <unfinished ...>
strcasecmp("sw", "")                             = 115
strlen("sw" <unfinished ...>
strlen("sw")                                     = 2
strcasecmp("swap", "" <unfinished ...>
strcasecmp("swap", "")                           = 115
strlen("swap" <unfinished ...>
strlen("swap")                                   = 4
strcasecmp("_netdev", "" <unfinished ...>
strcasecmp("_netdev", "")                        = 95
strlen("_netdev" <unfinished ...>
strlen("_netdev")                                = 7
strcasecmp("nosuid", "" <unfinished ...>
strcasecmp("nosuid", "")                         = 110
strlen("nosuid" <unfinished ...>
strlen("nosuid")                                 = 6
strcasecmp("suid", "" <unfinished ...>
strcasecmp("suid", "")                           = 115
strlen("suid" <unfinished ...>
strlen("suid")                                   = 4
strcasecmp("dev", "" <unfinished ...>
strcasecmp("dev", "")                            = 100
strlen("dev" <unfinished ...>
strlen("dev")                                    = 3
strcasecmp("nodev", "" <unfinished ...>
strcasecmp("nodev", "")                          = 110
strlen("nodev" <unfinished ...>
strlen("nodev")                                  = 5
strcasecmp("exec", "" <unfinished ...>
strcasecmp("exec", "")                           = 101
strlen("exec" <unfinished ...>
strlen("exec")                                   = 4
strcasecmp("noexec", "" <unfinished ...>
strcasecmp("noexec", "")                         = 110
strlen("noexec" <unfinished ...>
strlen("noexec")                                 = 6
strcasecmp("sync", "" <unfinished ...>
strcasecmp("sync", "")                           = 115
strlen("sync" <unfinished ...>
strlen("sync")                                   = 4
strcasecmp("dirsync", "" <unfinished ...>
strcasecmp("dirsync", "")                        = 100
strlen("dirsync" <unfinished ...>
strlen("dirsync")                                = 7
strcasecmp("async", "" <unfinished ...>
strcasecmp("async", "")                          = 97
strlen("async" <unfinished ...>
strlen("async")                                  = 5
strcasecmp("atime", "" <unfinished ...>
strcasecmp("atime", "")                          = 97
strlen("atime" <unfinished ...>
strlen("atime")                                  = 5
strcasecmp("noatime", "" <unfinished ...>
strcasecmp("noatime", "")                        = 110
strlen("noatime" <unfinished ...>
strlen("noatime")                                = 7
strcasecmp("diratime", "" <unfinished ...>
strcasecmp("diratime", "")                       = 100
strlen("diratime" <unfinished ...>
strlen("diratime")                               = 8
strcasecmp("nodiratime", "" <unfinished ...>
strcasecmp("nodiratime", "")                     = 110
strlen("nodiratime" <unfinished ...>
strlen("nodiratime")                             = 10
strcasecmp("loud", "" <unfinished ...>
strcasecmp("loud", "")                           = 108
strlen("loud" <unfinished ...>
strlen("loud")                                   = 4
strcasecmp("bind", "" <unfinished ...>
strcasecmp("bind", "")                           = 98
strlen("bind" <unfinished ...>
strlen("bind")                                   = 4
strcasecmp("move", "" <unfinished ...>
strcasecmp("move", "")                           = 109
strlen("move" <unfinished ...>
strlen("move")                                   = 4
strcasecmp("shared", "" <unfinished ...>
strcasecmp("shared", "")                         = 115
strlen("shared" <unfinished ...>
strlen("shared")                                 = 6
strcasecmp("slave", "" <unfinished ...>
strcasecmp("slave", "")                          = 115
strlen("slave" <unfinished ...>
strlen("slave")                                  = 5
strcasecmp("private", "" <unfinished ...>
strcasecmp("private", "")                        = 112
strlen("private" <unfinished ...>
strlen("private")                                = 7
strcasecmp("unbindable", "" <unfinished ...>
strcasecmp("unbindable", "")                     = 117
strlen("unbindable" <unfinished ...>
strlen("unbindable")                             = 10
strcasecmp("rshared", "" <unfinished ...>
strcasecmp("rshared", "")                        = 114
strlen("rshared" <unfinished ...>
strlen("rshared")                                = 7
strcasecmp("rslave", "" <unfinished ...>
strcasecmp("rslave", "")                         = 114
strlen("rslave" <unfinished ...>
strlen("rslave")                                 = 6
strcasecmp("rprivate", "" <unfinished ...>
strcasecmp("rprivate", "")                       = 114
strlen("rprivate" <unfinished ...>
strlen("rprivate")                               = 8
strcasecmp("runbindable", "" <unfinished ...>
strcasecmp("runbindable", "")                    = 114
strlen("runbindable" <unfinished ...>
strlen("runbindable")                            = 11
strcasecmp("ro", "" <unfinished ...>
strcasecmp("ro", "")                             = 114
strlen("ro" <unfinished ...>
strlen("ro"Error: call nesting too deep!
 <unfinished ...>
<... strlen resumed> )                           = 2
strcasecmp("rw", "" <unfinished ...>
strcasecmp("rw", ""Error: call nesting too deep!
 <unfinished ...>
<... strcasecmp resumed> )                       = 114
strlen("rw" <unfinished ...>
strlen("rw"Error: call nesting too deep!
 <unfinished ...>
<... strlen resumed> )                           = 2
strcasecmp("remount", "" <unfinished ...>
strcasecmp("remount", ""Error: call nesting too deep!
 <unfinished ...>
<... strcasecmp resumed> )                       = 114
strlen("remount" <unfinished ...>
strlen("remount"Error: call nesting too deep!
 <unfinished ...>
<... strlen resumed> )                           = 7
strlen("" <unfinished ...>
strlen(""Error: call nesting too deep!
 <unfinished ...>
<... strlen resumed> )                           = 0
xrealloc(0, 2, 0x486e7d, 0x2ab14bf0, 0x4a9ad0 <unfinished ...>
realloc(NULL, 2Error: call nesting too deep!
 <unfinished ...>
<... xrealloc resumed> )                         = 0x4a3b88
strcpy(0x004a3b88, "")                           = 0x004a3b88
strcmp("vfat", "auto")                           = 21
strcmp("vfat", "cifs")                           = 19
strcmp("vfat", "nfs")                            = 8
mount(0x7fe70361, 0x7fe7036b, 0x7fe7035c, 32768, 0x4a3b88Error: call nesting too deep!
Error: call nesting too deep!
) = 0
<... mount_main resumed> )                       = 0
exit(0 <unfinished ...>
_fini(0x2ab28600, 0x7fe7036b, 0x7fe7035c, 0, 0x2ab30720) = 0x2ab29a00
+++ exited (status 0) +++
/var/mod/root #

Gelöscht: Eine unsinnige Idee.
 
Zuletzt bearbeitet:
Hi,

weil es jetzt auch einen Feature Request für Freetz gibt (Link), wollte ich fragen, ob Ihr auch schon hfsplus von hier getestet habt.

Anbei mal eine statisch kompilierte Version mit den Patches von Debian.

Beste Grüße,
Whoopie
 

Anhänge

  • hfsplus-1.0.4-mipsel.tar.bz2
    196.6 KB · Aufrufe: 5
Hallo,

ich wollte das Apple Filing Protocol (AFP) bzw. netatalk dazu verwenden, um eine an meiner Fritzbox angeschlossene USB-Platte für Apples TimeMachine Backups zu nutzen. Samba ist dafür nicht geeignet.
Liefe das dann als NFS Exports?
Wird das mit dem in diesem Thread beschriebenen, zukünftig evtl. verfügbarem HFS/HFS+ auf der Fritzbox möglich sein, oder sind AFP/netatalk und HFS/HFS+ Äpfel bzw. Birnen?

Euch allen ein Frohes Weihnachtsfest und Gesundheit, Freude und Erfolg im Neuen Jahr 2009!
 
Zuletzt bearbeitet:
Hallo,

soweit ich das bisher überblicken kann (das habe ich aus verschiedenen Foren und Blogs zusammengesucht, keine Gewähr :) ) braucht man für TimeMachine erst mal AFP. Da TimeMachine aber Netzwerkbackups nur auf eine TimeCapsule erlaubt kann man Backups ohne nur mit externen (USB) Festplatten machen, die HFS+ formatiert sind. Es gibt wohl einen Workaround wonach man eine Platte, auf der einmal ein initiales Backup erstellt wurde über AFP freigeben kann und dann wird diese gefunden und weiter verwendet. Um dies über eine FritzBox! machen zu können bräuchte man also AFP und HFS+ Unterstützung.
Für beides gibt es Linux Kernel Module so dass eigentlich """nur""" jemand alles reinkompilieren und mit Freetz zum laufen kriegen muss. Ich werde im April eine 7270 bekommen und dann sofort anfangen das mit meiner jetzigen 7170 zu probieren. vorher geht es leider nicht da ich meinen Internetzugang brauche :).
 
DAS ganze Thema interessiert mich auch.
Ich bin allerdings verunsichert, warum einige schreiben Samba eignet sich nicht für TimeMachine. So wie ich das sehe, soll es doch klappen.

Ist irgendjemand schon mit HFS+ und AFP weitergekommen?
 
Falls es irgendjemanden noch interessiert, ich habe es jetzt geschafft der Fritz!Box HFS+ beizubringen...
In meinem Blog berichte ich davon.

Und schon wird eine angesteckte HFS+ Festplatte als normales USB-Medium erkannt und gemountet wie gewollt :)
Damit funktioniert natürlich auch TimeMachine fast wie gewünscht - nur etwas langsamer :)
 
Wenn es nur um TimeMachine geht ist der Aufwand garnicht nötig.
Bei einer Netzwerkplatte spielt dann das Format keine Rolle.

TimeMachine nutzt ein Image das unsichtbar in 8kB kleine Segmente eingeteilt ist. Ist also FAT32 tauglich.
Das ganze geht dann auch noch über Samba.

Das Image selber ist dann in HFS+ CaseSensetive formatiert. Somit hat TM sein passendes Format.
 
Naja über SMB & FAT32 hat es nicht wirklich funktioniert. TM ist immer abgeschmiert. Ich würde dem ganzen mit HFS+ wohl erneut eine Chance geben. Das Problem ist aber wohl eher die SMB Freigabe. Leider.
 

Neueste Beiträge

Statistik des Forums

Themen
244,881
Beiträge
2,220,089
Mitglieder
371,611
Neuestes Mitglied
Mandylion73
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.