meaning of error message

For the first time, I have seen an error message when running a sketch.

"Error mounting /dev/sda at /media/pi/METROM4BOOT8: no medium found on /dev/sda"

This is happening on an Adafruit M4 Metro express. The sketch running is the neopixel 'strandtest' that comes with the Adafruit_Neopixel library.

this sketch was run previously without presenting this error. The error occured after I tried running combined sketch using a string of 12 LEDs with PWM, along with the neopixel strip of 8 LEDs.

Anyway, any ideas what this particular message means?

Code is as follows:

[code]
#include <Adafruit_NeoPixel.h>
#define PIN A3

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();
  strip.setBrightness(32);
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  // Some example procedures showing how to display to the pixels:
  colorWipe(strip.Color(255, 0, 0), 50); // Red
  colorWipe(strip.Color(0, 255, 0), 50); // Green
  colorWipe(strip.Color(0, 0, 255), 50); // Blue
//colorWipe(strip.Color(0, 0, 0, 255), 50); // White RGBW
  // Send a theater pixel chase in...
  theaterChase(strip.Color(127, 127, 127), 50); // White
  theaterChase(strip.Color(127, 0, 0), 50); // Red
  theaterChase(strip.Color(0, 0, 127), 50); // Blue

  rainbow(20);
  rainbowCycle(20);
  theaterChaseRainbow(50);
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

[/code]

You are running the sketch and where does this erro-message show up?

On the neopixel-display?
in the serial monitor?

A message like ""Error mounting /dev/sda at /media/pi/METROM4BOOT8: no medium found on /dev/sda""

sounds like from a linux-system to me.
Through I'm not experienced with linux nor with this Adafruit M4 Metro express-Board

What is the process of uploading code to a Adafruit M4 Metro express-Board?

Mybe this info is completely not applying. It is just what came to my mind.
With a micro:bit-microntroller the process of uploading is completely different than with an Arduino.
A micro:bit presents itself as a removable USB-storage-device. A hex-file is created which you copy and paste into the device. The firmware on the micro:bit will recognize this and do a "internal upload" on the board.

So how does a Adafruit M4 Metro express board get the code into its memory? Do you have to adjust a COM-port and then click "upload" or is there any difference in the process of uploading code into a Adafruit M4 Metro express-board?
best regards Stefan

Did you forget to put an SD card in your PI or put it in upside down / backwards?

I agree that the message is likely coming from teh operating system. It is running on a Raspberry Pi-4.

The metro board gets it's code loaded by the Arduino IDE. Funny thing is that the code (most programs) run fine even with the error message. The IDE does not report any errors on compile, or running/loading the sketch.

It just started happening after I tried to run a sketch which ran 12 LEDs through PWM, and also a neopixel strip with 8 RBG LEDs. The sketch ran, but very slowly, and after that, anything I run kicks out one or more of these messages.

It appears as a 'pop-up' message.

Roger