SD card errors on hard reboot

58 views
Skip to first unread message

Troy Weber

unread,
Mar 19, 2018, 5:55:04 PM3/19/18
to BeagleBoard
Hello!

I have an application running on the Beaglebone Black. It runs from the eMMC because we need to mount a blank SD card and occasionally store data or video on the external SD card. Here are some details to jog ideas:
  • using a Bealgebone black
  • connected to a powered hub and running 2 led strips and 1 camera
  • made a custom cape/shield that allows us to interface with
    • an RGB button
    • a 16x2 char lcd
    • an optically isolated relay module
  • the relay module runs a solenoid circuit (in which I'm currently debugging the need for a flyback diode)
  • the SD card is mounted using /etc/fstab with the line /dev/mmcblk0p1 /media/sd auto auto,nofail,user,dmask=022,fmask=111 0 0
  • SD cards are inexpensive and found here: https://www.amazon.com/gp/product/B00WUCNGVQ/ref=oh_aui_search_detailpage?ie=UTF8&psc=1
My application is writing files to the SD card only on certain occasions during which the Beaglebone will not be hard-rebooted. However, it will be hard-rebooted (and the application started by systemd on next boot) as a means of shutting it down.

The problem is that I've recently began to discover issues with the blank SD card on next boot after a hard reboot. For a short time I can touch and write vim files on the card just fine. Once I start up the node.js program, part way through it complains about the SD card being read-only. From then on I cannot touch or vim files anymore. So I reformat the card and copy the configuration files back on. I've noticed that one of my configuration files is chopped short.

Here are some things I've tried and intend to try:
  • have tried
    • removing the power to the hub which seemed to be back-powering the BBB (still fails on reboot)
    • stopping the program that writes files entirely (still fails on reboot)
  • intend to try
    • writing the configuration files elsewhere (on the eMMC for example)
    • better SD cards
In the meantime, any ideas?

Robert Nelson

unread,
Mar 19, 2018, 6:05:22 PM3/19/18
to Beagle Board, Troy Weber
check the actual mount options, and if not enabled add "noatime"..

Regards,

--
Robert Nelson
https://rcn-ee.com/

Troy Weber

unread,
Mar 19, 2018, 6:43:45 PM3/19/18
to BeagleBoard
I will try that. I read up on noatime.

 noatime
              Do not update inode access times on this filesystem  (e.g.,  for
              faster  access on the news spool to speed up news servers). This
              works  for  all  inode  types  (directories  too),  so   implies
              nodiratime.

If this works, I'll be curious why. I guess I don't know enough about inodes just yet to understand why this might be a solution.

evilwulfie

unread,
Mar 19, 2018, 6:53:29 PM3/19/18
to beagl...@googlegroups.com
does it unmount properly every time on reboot ?
--
For more options, visit http://beagleboard.org/discuss
---
You received this message because you are subscribed to the Google Groups "BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/1df4730c-c024-4e1f-b0c1-2fbdf83ac714%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Troy Weber

unread,
Mar 19, 2018, 7:03:23 PM3/19/18
to BeagleBoard
Probably not. I should clarify that by a "hard reboot" I mean that essentially someone pulls the plug (or toggles a switch in the back). So no effort (to my knowledge) is made to unmount the micro SD card.

Troy Weber

unread,
Mar 19, 2018, 7:25:14 PM3/19/18
to BeagleBoard
I should also say that adding noatime does not appear the solve the issue. One configuration file in particular that is on the card appears somehow corrupted after the aforementioned reboots. It's attached.
WaterfallDiceGame.json

Troy Weber

unread,
Mar 19, 2018, 7:28:01 PM3/19/18
to BeagleBoard
I failed to attach it. It would not download the file (due to an io error). So the file I just attached is empty. When I cat the file on the linux system I get the following:

# cat /media/sd/config/WaterfallDiceGame.json 
{
  "_id": 302,
  "name": "diceGamePrototype",
  "type": "system",
  "label": "Dice Game Prototype",
  "packageName": "../../../../lib/hardware/oddson-waterfall-dice-game-system",
  "adapters": [],
  "drivers": [
    {
      "_id": 200,
      "name": "button",
      "label": "Button",
      "type": "driver",
      "packageName": "@synap/bonescript-state-sensor-driver",
      "adapters": [],
      "config": {
        "activeValue": 1,
        "pin": "P8_33",
        "debounce": {
          "checkRate": 1,
          "checks": 20
        }
      }
    },
    {
      "_id": 201,
      "name": "buttonRed",
      "label": "Button Red",
      "type": "driver",
      "packageName": "@synap/bonescript-state-switch-driver",
      "adapters": [],
      "config": {
        "pin": "P8_46",
        "activeState": 1,
        "startOn": false
      }
    },
    {
      "_id": 202,
      "name": "buttonGreen",
      "label": "Button Green",
      "type": "driver",
      "packageName": "@synap/bonescript-state-switch-driver",
      "adapters": [],
      "config": {
        "pin": "P8_36",
        "activeState": 1,
        "startOn": false
      }
    },
    {
      "_id": 203,
      "name": "buttonBlue",
      "label": "Button Blue",
      "type": "driver",
      "packageName": "@synap/bonescript-state-switch-driver",
      "adapters": [],
      "config": {
        "pin": "P8_34",
        "activeState": 1,
        "startOn": false
      }
    },
    {
      "_id": 210,
      "name": "solenoid1",
      "label": "Solenoid 1",
      "type": "driver",
      "packageName": "@synap/bonescript-state-switch-driver",
      "adapters": [],
      "config": {
        "pin": "P8_29",
        "activeState": 0,
        "startOn": false
      }
    },
    {
      "_id": 211,
      "name": "solenoid2",
      "label": "Solenoid 2",
      "type": "driver",
      "packageName": "@synap/bonescript-state-switch-driver",
      "adapters": [],
      "config": {
        "pin": "P8_27",
        "activeState": 0,
        "startOn": false
      }
    },
    {
      "_id": 220,
      "name": "diceCam",
      "label": "Camera",
      "type": "driver",
      "packageName": "../../../../lib/hardware/ffmpeg-camera-driver",
      "adapters": [],
      "config": {
        "camera": "/dev/video0",
        "video": {
          "filename": "roll.avi",
          "date": true,
          "time": true,
          "width": 1024,
          "height": 576,
          "fps": 15,
          "duration": 4
        },
        "photo": {
          "filename": "photo.jpg",
          "date": true,
          "time": true,
          "width": 640,
          "height": 480
        }
      }
    },
    {
      "_id": 230,
      "name": "lights1",
      "label": "Lights 1",
      "type": "driver",
      "packageName": "../../../../lib/hardware/oddson-blinkstick-driver",
      "adapters": [],
      "config": {
        "serialNo": "BS016951-3.1",
        "ledCount": 15,
        "animation": [
          {
            "duration": 250,
            "data": [
              255,
              0,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              255,
              63,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              255,
              127,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              255,
              191,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              255,
              255,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              191,
              255,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              127,
              255,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              63,
              255,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              0,
              255,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              0,
              255,
              63
            ]
          },
          {
            "duration": 250,
            "data": [
              0,
              255,
              127
            ]
          },
          {
            "duration": 250,
            "data": [
              0,
              255,
              191
            ]
          },
          {
            "duration": 250,
            "data": [
              0,
              255,
              255
            ]
          },
          {
            "duration": 250,
            "data": [
              0,
              191,
              255
            ]
          },
          {
            "duration": 250,
            "data": [
              0,
              127,
              255
            ]
          },
          {
            "duration": 250,
            "data": [
              0,
              63,
              255
            ]
          },
          {
            "duration": 250,
            "data": [
              0,
              0,
              255
            ]
          },
          {
            "duration": 250,
            "data": [
              63,
              0,
              255
            ]
          },
          {
            "duration": 250,
            "data": [
              127,
              0,
              255
            ]
          },
          {
            "duration": 250,
            "data": [
              191,
              0,
              255
            ]
          },
          {
            "duration": 250,
            "data": [
              255,
              0,
              255
            ]
          },
          {
            "duration": 250,
            "data": [
              255,
              0,
              191
            ]
          },
          {
            "duration": 250,
            "data": [
              255,
              0,
              127
            ]
          },
          {
            "duration": 250,
            "data": [
              255,
              0,
              63
            ]
          }
        ]
      }
    },
    {
      "_id": 231,
      "name": "lights2",
      "label": "Lights 2",
      "type": "driver",
      "packageName": "../../../../lib/hardware/oddson-blinkstick-driver",
      "adapters": [],
      "config": {
        "serialNo": "BS016957-3.1",
        "ledCount": 15,
        "animation": [
          {
            "duration": 250,
            "data": [
              255,
              0,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              255,
              63,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              255,
              127,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              255,
              191,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              255,
              255,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              191,
              255,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              127,
              255,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              63,
              255,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              0,
              255,
              0
            ]
          },
          {
            "duration": 250,
            "data": [
              0,
              255,
              63
            ]
          },
          {
            "duratcat: /media/sd/config/WaterfallDiceGame.json: Input/output error

evilwulfie

unread,
Mar 19, 2018, 7:42:59 PM3/19/18
to beagl...@googlegroups.com
Well yes if you fail to unmount a file system you can have issues.
On my systems i designed a battery backup system to prevent just the
issues you
are seeing now.
It does not happen all the time but one time is unacceptable.

Beaglebone is a live filesystem and you cant just pull the plug.

Troy Weber

unread,
Mar 19, 2018, 7:57:16 PM3/19/18
to beagl...@googlegroups.com
Well we need to be able to pull the plug without damaging things. Is the best option then to have a battery system that allows BBB to listen for loss of power and gracefully shut down? Are there alternative methods?

Troy Weber
Mechatronics / Software Developer
troyw...@gmail.com
707-761-1644
sent from mobile

--
For more options, visit http://beagleboard.org/discuss
---
You received this message because you are subscribed to a topic in the Google Groups "BeagleBoard" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/beagleboard/MfN646FtxiA/unsubscribe.
To unsubscribe from this group and all its topics, send an email to beagleboard...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/9e31b553-0c83-640b-99ab-b1b3f2c993ce%40gmail.com.

evilwulfie

unread,
Mar 19, 2018, 7:59:29 PM3/19/18
to beagl...@googlegroups.com
I dont know if its for sale there was a battery cape
or you can go with custom hardware
You received this message because you are subscribed to the Google Groups "BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/CAPMxd4SkyyydxiQgzeKQY%3DKoryWZ792Wuxv2%2BvW2Cgv-KjbwsQ%40mail.gmail.com.

Graham

unread,
Mar 19, 2018, 8:55:12 PM3/19/18
to BeagleBoard
As a matter of buffer hygiene, are you flushing the buffers to the sd card after every time you write to it?
Something like the equivalent of the 'sync' command?
If there is still unwritten info in the buffers when the power gets pulled, bye-bye data.

In Linux, when the mounted drive is suddenly declared "read-only" it means that the OS has observed some corruption or error in the file system, and does so to prevent further corruption.

--- Graham

==

Troy Weber

unread,
Mar 19, 2018, 9:00:27 PM3/19/18
to beagl...@googlegroups.com
probably not! I'll have to look into flushing buffers, I've never heard of that.


Troy Weber
Mechatronics / Software Developer
troyw...@gmail.com
707-761-1644
sent from mobile

evilwulfie

unread,
Mar 19, 2018, 10:22:26 PM3/19/18
to beagl...@googlegroups.com
the EMMC can also suffer from the plug being pulled

Troy Weber

unread,
Mar 20, 2018, 1:29:00 PM3/20/18
to BeagleBoard
How would you flush the sd card buffers from node.js? To write to the files I am doing using the writeFileSync command.

Graham Haddock

unread,
Mar 20, 2018, 2:53:54 PM3/20/18
to BeagleBoard
I don't use node.js, so I am not familiar with it.
The name of the function suggests that it does a 'sync' after the write, which is what you want.
In Linux, the 'sync' command flushes all the buffers to disk.
I would just read the manual on the function to make sure it is doing what you want.
--- Graham

==

To unsubscribe from this group and all its topics, send an email to beagleboard+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/980149f3-a0a8-4863-a327-3fd4a0e2657a%40googlegroups.com.

Tarmo Kuuse

unread,
Apr 4, 2018, 11:24:05 AM4/4/18
to BeagleBoard
What's the file system on the SD card? FAT? ext4?

--
Tarmo

evilwulfie

unread,
Apr 4, 2018, 11:57:41 AM4/4/18
to beagl...@googlegroups.com
you cannot just do a hard shutdown you must use a shutdown now command
you always risk file system corruption if you do not
--
For more options, visit http://beagleboard.org/discuss
---
You received this message because you are subscribed to the Google Groups "BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages