microSD card "partition not aligned" warning

Ignacio

New Member

Reaction score: 4
Messages: 10

I have 2 identical arm devices running FreeBSD 11.4 from a 64 GB microSD card that is mounted read-only most of the time, whenever I mount it read-write and then back to read-only with these commands:
Code:
mount -u -w /
mount -u -r /
It will take between 10 and 40 seconds to mount it read-only again, freezing disk access during that time, and in dmesg it appears these messages:
Code:
Mar 27 07:56:00 bl12-247-99 kernel: GEOM_PART: partition 1 on (diskid/DISK-E89ADB97, MBR) is not aligned on 4194304 bytes
Mar 27 07:56:00 bl12-247-99 kernel: GEOM_PART: partition 2 on (diskid/DISK-E89ADB97, MBR) is not aligned on 4194304 bytes
Mar 27 07:56:00 bl12-247-99 kernel: GEOM_PART: partition 1 on (ufsid/5e37468114d819f1, BSD) is not aligned on 4194304 bytes
Mar 27 07:56:00 bl12-247-99 kernel: GEOM_PART: partition 1 on (diskid/DISK-E89ADB97s2, BSD) is not aligned on 4194304 bytes
The partitions of both cards look like this:
Code:
# gpart show mmcsd0
=>       63  124735425  mmcsd0  MBR  (59G)
         63       2016          - free -  (1.0M)
       2079      65520       1  !12  [active]  (32M)
      67599       1009          - free -  (505K)
      68608  121533440       2  freebsd  (58G)
  121602048    3133440          - free -  (1.5G)
Is this a driver related problem? or maybe I should partition the cards in a different way to keep partitions aligned somewhat?
 

SirDice

Administrator
Staff member
Administrator
Moderator

Reaction score: 11,604
Messages: 37,927

2079 and 68608 is not a 4K boundary. How did you create these slices?
 
OP
I

Ignacio

New Member

Reaction score: 4
Messages: 10

I made a custom image with crochet, then copied it with dd to the microSD card and in the first boot it made a growfs to use all the space available, maybe there is some crochet config that I overlooked.

Anyway, how can you tell that those numbers are not 4K boundaries? I understand that they should be a multiple of 8 as we are talking about 512 bytes sectors, isn't it? so 2079 wouldn't do but 2080 would do? but then 68608 is a multiple of 8.
 

SirDice

Administrator
Staff member
Administrator
Moderator

Reaction score: 11,604
Messages: 37,927

I understand that they should be a multiple of 8 as we are talking about 512 bytes sectors, isn't it? so 2079 wouldn't do but 2080 would do?
Correct.
but then 68608 is a multiple of 8.
It's a slice, there are partitions inside that slice. The partitions inside the slice aren't aligned.

If I recall correctly gpart(8) already uses 4K boundaries by default but you can always add -a 4K to make sure it does.
 
OP
I

Ignacio

New Member

Reaction score: 4
Messages: 10

What is the sector size of your SD card?
I understand it's 512 bytes:
Code:
# diskinfo -c mmcsd0
mmcsd0
        512             # sectorsize
        63864569856     # mediasize in bytes (59G)
        124735488       # mediasize in sectors
        4194304         # stripesize
        0               # stripeoffset
        SDHC SB64G 8.0 SN E89ADB97 MFG 05/2019 by 3 SD  # Disk descr.
        E89ADB97        # Disk ident.
        Yes             # TRIM/UNMAP support
        0               # Rotation rate in RPM

I/O command overhead:
        time to read 10MB block      1.737557 sec       =    0.085 msec/sector
        time to read 20480 sectors   7.293083 sec       =    0.356 msec/sector
        calculated command overhead                     =    0.271 msec/sector
Almost 2 seconds to read 10MB looks very poor, it may be caused by the partitions misalignment, isn't it? it could also make the card fail much sooner?
 

VladiBG

Daemon

Reaction score: 509
Messages: 1,111

Your SD card is with Stripesize of 4K and your partition is not aligned.
68608 / 4096 = 16.75

The read speed is against the entire card, so it may be worst when you read from not aligned partition.
 
Top