Kompression ausführbarer Dateien vs. SquashFS

Code:
mkdir /var/sqfdir
cat test.sqf > /var/loop0
-sh: cannot create /var/loop0: No such device or address
mount -o loop /var/loop0 /var/sqfdir
mount: Mounting /var/loop0 on /var/sqfdir failed: No such device or address

Ein cat auf das Loop-device ist nicht nötig.
Code:
# Vorbereitung, falls notwendig
mknod /var/loop0 b 7 0
modprobe loop
mkdir -p /var/sqfdir
# Mount
mount -o loop test.sqf /var/sqfdir
 
Irgendwie scheint das bei mir noch nicht zu funktionieren. Ich bekomme immer noch den selben Fehler beim Mounten. Da müsste ich noch etwas forschen...

Ich dachte auch, dass man das loop.ko Modul nicht einbinden braucht, da ja das root-System bereits als squashfs gemounted wurde. Das wird wahrscheinlich im Bootloader gemacht, oder?
 
Ist den loop bei den geladenen Modulen (anzuzeigen via lsmod) dabei?

Dirk
 
Ja ist dabei. Ich lade es über insmod nach. Ich muss dazu sagen, dass ich das bei der Standard-Firmware ohne freetz probiere:

Code:
# mount -o loop test.sqf /var/sqfdir
mount: Couldn't setup loop device
mount: Mounting (null) on /var/sqfdir failed: No such file or directory
obiges bekomme ich auch ohne loop.ko geladen zu haben.

oder:
Code:
mknod /var/loop0 b 7 0
# cat test.sqf > /var/loop0
cat: Write Error: No space left on device
# mount -o loop /var/loop0 /var/sqfdir
mount: Mounting /var/loop0 on /var/sqfdir failed: Input/output error

Also beim zweiten Fall mit 'cat' doch nicht der selbe Fehler.

oder:
Code:
mknod /var/loop1 b 8 0
cat test.sqf > /var/loop1
mount -o loop /var/loop1 /var/sqfdir
mount: Mounting /var/loop1 on /var/sqfdir failed: Device or resource busy
wieder was anderes :confused:

In allen drei Fällen ist loop.ko geladen und unter lsmod sichtbar (aber nicht in Verwendung!). Bei einem 'dmesg' sieht man leider auch nichts.
 
Zuletzt bearbeitet:
Code:
# mount -o loop test.sqf /var/sqfdir
[B]mount: Couldn't setup loop device[/B]
mount: Mounting (null) on /var/sqfdir failed: No such file or directory
Offensichtlich klappt es nicht, die Loop Verbindung herzustellen.

Code:
mknod /var/loop0 b 7 0
# cat test.sqf > /var/loop0
cat: Write Error: No space left on device
# mount -o loop /var/loop0 /var/sqfdir
mount: Mounting /var/loop0 on /var/sqfdir failed: Input/output error
Wieso versuchst Du immer, mit cat Deine Datei auf das Loop Device zu kopieren? Das ist weder nötig noch sinnvoll.

Code:
mknod /var/loop1 b [B]8 0[/B]

Wie kommst Du darauf, loop1 mit 8,0 zu erstellen? richtig ist 7,1. Allgemein hat loopx die Nummer 7,x. Zwei Loop Einträge sind bei mir mit ds-mod schon dabei.
Code:
brw-r-----    1 root     root       7,   0 Jan  1 01:00 /dev/loop0
brw-r-----    1 root     root       7,   1 Jan  1 01:00 /dev/loop1

Versuch es mal mit losetup (ggf. busybox mit losetup erstellen):
Code:
# Ohne Pfad
losetup /dev/loop0 test.sqf
# Evtl. besser mit Pfad:
losetup /dev/loop0 /pfad/zu/test.sqf
# Zuordnungen anzeigen
losetup
 
RalfFriedl schrieb:
Wieso versuchst Du immer, mit cat Deine Datei auf das Loop Device zu kopieren? Das ist weder nötig noch sinnvoll.
Ich habe mir von spblinux die cfg-Files angeschaut. Im Skript habe ich eine Stelle gesehen, welche die wget Ausgabe direkt in das loop-Device schreibt. Ich fand das eigentlich nicht so schlecht.

RalfFriedl schrieb:
Wie kommst Du darauf, loop1 mit 8,0 zu erstellen? richtig ist 7,1
Try and Error ;). Hab mich wahrscheinlich von /proc/devices ablenken lassen...

RalfFriedl schrieb:
Versuch es mal mit losetup (ggf. busybox mit losetup erstellen):
Ahhh... Irgendwo muss ja das Loop-Device zugeordnet werden, wenn ich ein SquashFS Image mounten möchte?! losetup hört sich auf jedenfall gut an.
 
Nutzt spblinux nicht Ram-Disks?

MfG Oliver
 
Gute Frage, nächste Frage...
Das Skript von spblinux ist recht "advanced". Hatte da ein paar Schwierigkeiten, das genau zu verstehen.
Wo ist jetzt der Unterschied?
 
Ja schon. Aber nicht über ein loop-Device, sondern über eine RAM-Disk. Deshalb ist dort wohl auch das "cat" nötig.

MfG Oliver
 
Mit losetup wird /dev/loopx mit einer Datei verbunden. Wenn man nachher die Datei auf /dev/loopx kopiert, wird die Datei gelesen und auf sich selbst geschrieben, über den Umweg mit dem Loop Device. Über das Loop Device wird vermutlich zumindest nicht der Datei-Inhalt vorher gelöscht, so daß wenigstens der Inhalt nicht verloren geht. Aber unnötig ist es auf jeden Fall.

"mount -o loop" übernimmt automatisch die Funktion von losetup. Vom direkten Aufruf von losetup erhoffe ich mir nur eine deutlichere Fehlermeldung. Aber wenn es damit gehen sollte, dann umso besser.

Wenn Du mount mit der Option "-o loop" verwendest, gibst Du direkt die Datei an. Mount verbindet sie mit einer freien loopx und mountete dann diese. Wenn Du aber vorher mit losetup selbst eine Verbindung herstellst, rufst Du Mount ohne die Option "-o loop" auf und dafür direkt mit der Gerätedatei /dev/loopx. Also
Code:
# entweder so
mount -o loop test.sqf /var/sqfdir
# oder so
losetup /dev/loop0 test.sqf
mount /dev/loop0 /var/sqfdir
 
Also bei mir geht das mit geladenem loop.ko:
Code:
/var/mod/root # mount -o loop nfsclient.sqf /var/mod/root/loop
/var/mod/root # mount |grep loop
/dev/loop0 on /var/mod/root/loop type squashfs (ro)
Ohne loop.ko:
Code:
...
open("/var/mod/root/nfsclient.sqf", O_RDWR|0x2000 /* O_??? */) = 6
fstat64(2145848368, {st_mode=S_IFBLK|0640, st_rdev=makedev(7, 0), ...}) = 0
open("/dev/loop0", O_RDWR|0x2000 /* O_??? */) = -1 ENXIO (No such device or address)
fstat64(2145848368, {st_mode=S_IFBLK|0640, st_rdev=makedev(7, 1), ...}) = 0
open("/dev/loop1", O_RDWR|0x2000 /* O_??? */) = -1 ENXIO (No such device or address)
fstat64(2145848368, 0x7fe70ba0)         = -1 ENOENT (No such file or directory)
close(6)                                = 0
ioctl(2147483647, TIOCNXCL, 0x7fe70c80) = -1 EBADF (Bad file descriptor)
brk(0x4ab000)                           = 0x4ab000
write(2, "mount: cannot setup loop device:"..., 59mount: cannot setup loop device: No such file or directory
) = 59
exit(2)
MfG Oliver
 
gelöst :)

Jawoll es geht :)

Es lag daran, dass kein losetup in der Busybox war und das loop.ko Modul nicht geladen wurde.
Jetzt geht es mit der Standard-FW und mit freetz:

Code:
/dev/root on / type squashfs (ro)
proc on /proc type proc (rw,nodiratime)
ramfs on /var type ramfs (rw)
/dev/mtdblock6 on /data type jffs2 (rw,noatime)
usbfs on /proc/bus/usb type usbfs (rw)
sysfs on /var/sysfs type sysfs (rw)
/dev/sda1 on /var/media/ftp/MassStorageDevice-Partition-0-1 type vfat (rw,nodiratime,uid=1000,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1)
/var/loop0 on /var/sqfdir type squashfs (ro)

Vielen Dank !!!!
 
Zuletzt bearbeitet:
Kostenlos!

Statistik des Forums

Themen
248,917
Beiträge
2,305,038
Mitglieder
378,638
Neuestes Mitglied
Patrick89