Re: Hot-plugging microSD on Raspberry Pi under FreeBSD

Mark Millard via freebsd-arm <[email protected]>
Newsgroups gmane.os.freebsd.devel.arm
Message-ID <[email protected]>
On 2021-Dec-26, at 11:23, bob prohaska <[email protected]> wrote:

> Are there any special protocols to observe when hot-plugging
> microSD cards on Raspberry Pi when FreeBSD is up and running?
> Electrically it's claimed to be ok in this thread by one "jdb":
> https://forums.raspberrypi.com/viewtopic.php?t=281249
> so I'm asking about how the FreeBSD software might react. 
> 
> Obviously filesystems have to be gracefully unmounted, but is
> that all? Can the kernel be "aware" of an unused device and
> get confused if it goes away?

As I remember, for FreeBSD,

A) The built-in microsd card slot works fine for swapping
   media that are not mounted at the time.

but, for example (no mounts involved, RPi4B 8GiByte test context),

B.0) Plug-in the USB reader, no media present. (USB3 example here.)
B.1) Insert a 128 GiByte media to the reader.
B.2) Remove that media.
B.3) Insert a 32 GiByte media to the reader
     (same slot in the reader).

Result:

(da4:umass-sim1:1:0:3): READ(10). CDB: 28 00 0e e2 af ff 00 00 01 00 
(da4:umass-sim1:1:0:3): CAM status: SCSI Status Error
(da4:umass-sim1:1:0:3): SCSI status: Check Condition
(da4:umass-sim1:1:0:3): SCSI sense: ILLEGAL REQUEST asc:21,0 (Logical block address out of range)
(da4:umass-sim1:1:0:3): Error 22, Unretryable error
(da4:umass-sim1:1:0:3): READ(10). CDB: 28 00 0e e2 af ff 00 00 01 00 
(da4:umass-sim1:1:0:3): CAM status: SCSI Status Error
(da4:umass-sim1:1:0:3): SCSI status: Check Condition
(da4:umass-sim1:1:0:3): SCSI sense: ILLEGAL REQUEST asc:21,0 (Logical block address out of range)
(da4:umass-sim1:1:0:3): Error 22, Unretryable error
(da4:umass-sim1:1:0:3): READ(10). CDB: 28 00 0e e2 af c1 00 00 04 00 
(da4:umass-sim1:1:0:3): CAM status: SCSI Status Error
(da4:umass-sim1:1:0:3): SCSI status: Check Condition
(da4:umass-sim1:1:0:3): SCSI sense: ILLEGAL REQUEST asc:21,0 (Logical block address out of range)
(da4:umass-sim1:1:0:3): Error 22, Unretryable error
(da4:umass-sim1:1:0:3): READ(10). CDB: 28 00 0e e2 af fe 00 00 01 00 
(da4:umass-sim1:1:0:3): CAM status: SCSI Status Error
(da4:umass-sim1:1:0:3): SCSI status: Check Condition
(da4:umass-sim1:1:0:3): SCSI sense: ILLEGAL REQUEST asc:21,0 (Logical block address out of range)
(da4:umass-sim1:1:0:3): Error 22, Unretryable error
(da4:umass-sim1:1:0:3): READ(10). CDB: 28 00 0e e2 af ff 00 00 01 00 
(da4:umass-sim1:1:0:3): CAM status: SCSI Status Error
(da4:umass-sim1:1:0:3): SCSI status: Check Condition
(da4:umass-sim1:1:0:3): SCSI sense: ILLEGAL REQUEST asc:21,0 (Logical block address out of range)
(da4:umass-sim1:1:0:3): Error 22, Unretryable error
(da4:umass-sim1:1:0:3): READ(10). CDB: 28 00 0e e2 af fe 00 00 01 00 
(da4:umass-sim1:1:0:3): CAM status: SCSI Status Error
(da4:umass-sim1:1:0:3): SCSI status: Check Condition
(da4:umass-sim1:1:0:3): SCSI sense: ILLEGAL REQUEST asc:21,0 (Logical block address out of range)
(da4:umass-sim1:1:0:3): Error 22, Unretryable error
(da4:umass-sim1:1:0:3): READ(10). CDB: 28 00 0e e2 af ff 00 00 01 00 
(da4:umass-sim1:1:0:3): CAM status: SCSI Status Error
(da4:umass-sim1:1:0:3): SCSI status: Check Condition
(da4:umass-sim1:1:0:3): SCSI sense: ILLEGAL REQUEST asc:21,0 (Logical block address out of range)
(da4:umass-sim1:1:0:3): Error 22, Unretryable error
(da4:umass-sim1:1:0:3): READ(10). CDB: 28 00 0e e2 af ff 00 00 01 00 
(da4:umass-sim1:1:0:3): CAM status: SCSI Status Error
(da4:umass-sim1:1:0:3): SCSI status: Check Condition
(da4:umass-sim1:1:0:3): SCSI sense: ILLEGAL REQUEST asc:21,0 (Logical block address out of range)
(da4:umass-sim1:1:0:3): Error 22, Unretryable error
GEOM_PART: da4 was automatically resized.
  Use `gpart commit da4` to save changes or `gpart undo da4` to revert them.
GEOM_PART: da4 was automatically resized.
  Use `gpart commit da4` to save changes or `gpart undo da4` to revert them.
GEOM_PART: da4 was automatically resized.
  Use `gpart commit da4` to save changes or `gpart undo da4` to revert them.
GEOM_PART: da4 was automatically resized.
  Use `gpart commit da4` to save changes or `gpart undo da4` to revert them.
GEOM_PART: da4 was automatically resized.
  Use `gpart commit da4` to save changes or `gpart undo da4` to revert them.

If you do the 32 GiByte first instead, then for the 128 GiByte you
get notices from GEOM_PART about "was automatically resized"
but it does not "address out of range".

I expect that swapping two media of the same capacity would
be less likely to generate any messages, but that does not
mean that such a swap would be handled fully correctly.

So I unplug the whole reader to swap media. This is messier
if multiple slots are in use (more unmounts and later
remounts).

I expect that this is a FreeBSD issue, not a RPi4B
issue. But I've not tested such under Fedora or the
like or (recently) on a Rock64 or other such.

===
Mark Millard
marklmi at yahoo.com
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.