Mount TMPFS instead of ro /dev

Posted by schiggn on Super User See other posts from Super User or by schiggn
Published on 2012-09-12T12:04:38Z Indexed on 2012/11/24 23:07 UTC
Read the original article Hit count: 371

Filed under:
|
|
|

I am working on a ARM-Based embedded system with a custom Debian Linux based on kernel 2.6.31. In the final system, the Root file system is stored as squashfs on flash. Now, the folder /dev is created by udev, but since there is no hot plugging functionality needed and booting time is critical, I wanted to delete udev and "hard code" the /dev folder (read here, page 5). because i still need to change parameters of the devices (with ioctl /sysfs) this does not work for me in this case. so i thought of mounting a tmpfs on /dev and change the parameters there. is this possible? and how to do best? my approach would be:

  • delete /dev from RFS
  • create tar containing basic devices
  • mount tmpfs /dev
  • untar tar-file into /dev
  • change parameters

Could this work? Do you see any problems?

I found out, that you can mount on top of already mounted mount point, is it somehow possible just to take data with while mounting the new file system? if so that would be very convenient!

Thanks

Update: I just tried that out, but I'm stuck at a certain point. I packed all my devices into devices.tar, packed it into /usr of my squashfs and added the following lines to mountkernfs.sh, which is executed right after INIT.

#mount /dev on tmpfs
echo -n "Mounting /dev on tmpfs..."
mount -o size=5M,mode=0755 -t tmpfs tmpfs /dev
mknod -m 600 /dev/console c 5 1
mknod -m 600 /dev/null c 1 3
echo "done."
echo -n "Populating /dev..."
tar -xf /usr/devices.tar -C /dev
echo "done."

This works fine on the version over NFS, if I place printf's in the code, I can see it executing, if I comment out the extracting part, its complaining about missing devices.

  • Booting OK

    mmc0: new high speed SDHC card at address 0007
    mmcblk0: mmc0:0007 SD04G 3.67 GiB 
    mmcblk0: p1
    IP-Config: Unable to set interface netmask (-22).
    Looking up port of RPC 100003/2 on 192.168.1.234
    Looking up port of RPC 100005/1 on 192.168.1.234
    VFS: Mounted root (nfs filesystem) on device 0:14.
    Freeing init memory: 136K
    INIT: version 2.86 booting
    Mounting /dev on tmpfs...done.
    Populating /dev...done.
    Initializing /var...done.
    Setting the system clock.
    System Clock set to: Thu Sep 13 11:26:23 UTC 2012.
    INIT: Entering runlevel: 2
    UBI: attaching mtd8 to ubi0
    
  • Commenting out the extraction of the tar

    mmc0: new high speed SDHC card at address 0007
    mmcblk0: mmc0:0007 SD04G 3.67 GiB 
    mmcblk0: p1
    IP-Config: Unable to set interface netmask (-22).
    Looking up port of RPC 100003/2 on 192.168.1.234
    Looking up port of RPC 100005/1 on 192.168.1.234
    VFS: Mounted root (nfs filesystem) on device 0:14.
    Freeing init memory: 136K
    INIT: version 2.86 booting
    Mounting /dev on tmpfs...done.
    Populating /dev...done.
    Initializing /var...done.
    Setting the system clock.
    Cannot access the Hardware Clock via any known method.
    Use the --debug option to see the details of our search for an access method.
    Unable to set System Clock to: Thu Sep 13 12:24:00 UTC 2012 ... (warning).
    INIT: Entering runlevel: 2
    libubi: error!: cannot open "/dev/ubi_ctrl"
    

So far so good. But if I pack the whole story into a squashfs and boot from there, it is acting strange. It's telling me while booting that it is unable to open an initial console and its throwing errors on mounting the UBIFS devices, but finally provides a login anyway. Over that my echo's are not executed. If I then log in, /dev is mounted as TMPFS as desired and all the devices reside inside. When I redo the "mount" command to mount the UBIFS partitions it is executed whitout problem and useable.

  • From squashfs

    VFS: Mounted root (squashfs filesystem) readonly on device 31:15.
    Freeing init memory: 136K
    Warning: unable to open an initial console.
    mmc0: new high speed SDHC card at address 0007
    mmcblk0: mmc0:0007 SD04G 3.67 GiB 
    mmcblk0: p1
    UBIFS error (pid 484): ubifs_get_sb: cannot open "ubi1_0", error -19
    

Additionally, a part of the rest of the bootscripts is still exexuted, but not all of them. Does anyone has a clue why? Other question, is 5MB enough/too much for /dev?

© Super User or respective owner

Related posts about mount

  • 12.10 update breaks NFS mount

    as seen on Ask Ubuntu - Search for 'Ask Ubuntu'
    I've just upgraded to the latest 12.10 beta. Rebooted twice. The problem is with the NFS folders not mounting, here's a verbose log. # mount -v myserver:/nfs_shared/tools /tools/ mount: no type was given - I'll assume nfs because of the colon mount.nfs: timeout set for Mon Oct 1 11:42:28 2012 mount… >>> More

  • Mount SMB / AFP 13.10

    as seen on Ask Ubuntu - Search for 'Ask Ubuntu'
    I cannot seem to get Ubuntu to mount a mac share via SMB or AFP. I've tried the following... AFP: apt-get install afpfs-ng-utils mount_afp afp://user:password@localip/share /mnt/share Error given: "Could not connect, never got a reponse to getstatus, Connection timed out". Which is odd as I can… >>> More

  • Mount Return Code for CIFS mount

    as seen on Server Fault - Search for 'Server Fault'
    When I run the following command (as root or via sudo) from a bash script I get an exit status (or return code in mount man page parlance) of 1: mount -v -t cifs //nasbox/volume /tmpdir/ --verbose -o credentials=/root/cifsid & /tmp/mylog It outputs the following into the myflog file: parsing… >>> More

  • Disable raid member check upon mount to mount damaged nvidia raid1 member

    as seen on Server Fault - Search for 'Server Fault'
    Hi, A friend of mine destroyed his Nvidia RAID1 array somehow and in trying to fix it, he ended up with a non-working array. Because of the RAID metadata, the actual disk data was stored at an offset from the beginning. I was able to identify this offset with dd and a hexeditor and then I used losetup… >>> More

  • Network shares do not mount.

    as seen on Super User - Search for 'Super User'
    My network shares were mounting fine yesterday.. suddenly they are not. They were mounting fine for the last two weeks or however long since I added them. When I run sudo mount -a I get the following error: topsy@monolyth:~$ sudo mount -a mount error(12): Cannot allocate memory Refer to the mount… >>> More

Related posts about arm