Re: Hot-plugging microSD on Raspberry Pi under FreeBSD
Date: Sun, 26 Dec 2021 21:00:38 UTC
On 2021-Dec-26, at 11:23, bob prohaska <fbsd@www.zefox.net> 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