SD card formatting
Gary Aitken
freebsd at dreamchaser.org
Mon Mar 16 01:07:59 UTC 2020
On 3/15/20 5:00 PM, Polytropon wrote:
> On Sun, 15 Mar 2020 15:39:33 -0600, Gary Aitken wrote:
>> 11.3-RELEASE-p6 GENERIC amd64
>>
>> I'm having trouble reading SD cards formatted in my camera (Olympus
>> EM1-MkII) or on a Win 7 system.
>
> What filesystem is in use? For cards, it's typically FAT.
>
>
>
>> When attempting to mount, I get the following:
>>
>> $ mount -t msdosfs /dev/da0s1 /mnt/memstick mount_msdosfs:
>> /dev/da0s1: Invalid argument $ mount -t ntfs /dev/da0s1
>> /mnt/memstick mount: /dev/da0s1: Operation not supported by device
>>
>> Cards used without formatting *usually* seem to work.
>
> So those are preformatted (sometimes sold this way, sometimes
> initialized when first used in a camera).
>
>
>
>> If I look at the cards which don't mount using gpart, I see:
>>
>> Card formatted in camera:
>> $ gpart show -p /dev/da0
>> => 63 120944577 da0 MBR (58G)
>> 63 32705 - free - (16M)
>> 32768 120911872 da0s1 ntfs [active] (58G)
> ^^^^
>
> It seems that the card has been accidentally formatted with NTFS. In
> most cases, cameras cannot use that. If you want to mount it on
> FreeBSD, use ntfs-3g.
As stated above, this is a card formatted _in the camera_. So the
camera can read it fine. The problem is fbsd can't mount it.
>> $ gpart show -r /dev/da0 => 63 120944577 da0 MBR (58G) 63
>> 32705 - free - (16M) 32768 120911872 1 7 [active]
>> (58G)
>>
>> If I look at cards that I know I can mount I see the following:
>>
>> $ gpart show -p da0 => 63 30375873 da0 MBR (14G) 63
>> 8129 - free - (4.0M) 8192 15118336 da0s1 fat32lba
>> (7.2G)
> ^^^^^^^^ Correct.
>
>> 15126528 15249408 - free - (7.3G) $ gpart show -r
>> /dev/da0 => 63 30375873 da0 MBR (14G) 63 8129 -
>> free - (4.0M) 8192 15118336 1 12 (7.2G) 15126528 15249408
>> - free - (7.3G)
>>
>> or:
>>
>> $ gpart show -p /dev/da0 => 1 15633407 da0 MBR (7.5G) 1
>> 31 - free - (16K) 32 15633376 da0s1 fat32 (7.5G)
> ^^^^^ Correct as well.
>
>> $ gpart show -r /dev/da0 => 1 15633407 da0 MBR (7.5G) 1
>> 31 - free - (16K) 32 15633376 1 11 (7.5G)
>>
>> I tried reformatting as follows:
>>
>> # gpart delete -i 1 da0 da0s1 deleted # gpart add -i 1 -a 4M -t
>> "\!11" da0 da0s1 added # gpart show -r da0 => 63 120944577
>> da0 MBR (58G) 63 8129 - free - (4.0M) 8192
>> 120930304 1 11 (58G) 120938496 6144 - free -
>> (3.0M) # newfs_msdos -F 32 /dev/da0s1 /dev/da0s1: 120900736 sectors
>> in 1889074 FAT32 clusters (32768 bytes/cluster) BytesPerSec=512
>> SecPerClust=64 ResSectors=32 FATs=2 Media=0xf0 SecPerTrack=63
>> Heads=255 HiddenSecs=0 HugeSectors=120930304 FATsecs=14759
>> RootCluster=2 FSInfo=1 Backup=2
>>
>> If I put this card in the camera, I get an error ("Card Error")
>
> Personally, I tend to leave the formatting to the camera which I want
> to use the card in; the camera "knows best" what it can uderstand.
> :-)
In this case, the camera is not the problem; cards formatted in the camera
are usable by the camera. But they aren't mountable on fbsd. So I can't
transfer the files to fbsd, either from the camera or by inserting the
card in an fbsd usb adapter.
Since cards formatted by the camera are not mountable on fbsd, I was
hoping to find a way to format the card on fbsd that would be
readable both by the camera and by fbsd.
> There is a simple reason: Several variants of FAT exist, and some
> cameras often only support one out of that bag. If you guess (and
> use) the wrong one, the camera will report an error. So, as I
> suggested, let the camera do the right thing.
>
>> If I again format the card in the camera, I can't mount it.
>
> Have you checked _how_ the camera formats it? Check with gpart (or
> fdisk, it still works!). There's also the following totally unelegant
> way:
>
> # file -r - < /dev/da0
>
> and / or
>
> # file -r - < /dev/da0s1
>
> You should see a FAT summary.
For a card formatted in the camera, which the camera can read but fbsd
cannot mount:
# file -r - < /dev/da0
/dev/stdin: DOS/MBR boot sector; partition 1 : ID=0x7, active, start-CHS (0x2,10,9), end-CHS (0x3ff,254,63), startsector 32768, 120911872 sectors
# file -r - < /dev/da0s1
/dev/stdin: DOS/MBR boot sector
# mount_msdosfs /dev/da0s1 /mnt/memstick
mount_msdosfs: /dev/da0s1: Invalid argument
For a card never reformatted (i.e. formatted by the manufacturer, and
used in the camera); this card is usable by the camera and mountable
by fbsd:
# file -r - < /dev/da0
/dev/stdin: DOS/MBR boot sector; partition 1 : ID=0xc, active, start-CHS (0x0,130,3), end-CHS (0x3ff,254,63), startsector 8192, 31496192 sectors
# file -r - < /dev/da0s1
/dev/stdin: , code offset 0x0+3, OEM-ID " ", sectors/cluster 64, reserved sectors 504, Media descriptor 0xf8, sectors/track 63, heads 255, hidden sectors 8192, sectors 31496192 (volumes > 32 MB), FAT (32 bit), sectors/FAT 3844, serial number 0x0, unlabeled
# mount_msdosfs /dev/da0s1 /mnt/memstick
# ls /mnt/memstick
DCIM System Volume Information
>> I need to reformat these cards so I can use them in the camera and
>> on freebsd, and apparently neither the camera nor win7 does that,
>> so... What's the right way to lay out, format, and create a file
>> system on an SD card so it is usable by cameras and windoze?
>
> Typically using the _camera_ to do this job is the right thing. It's
> often nice to have the card in "mint condition" (i. e., nothing on
> it, no partitions, no filesystems). Using dd to overwrite the first
> MB should be enough. On a "Windows" PC, the card should then
> correctly be recognized as FAT. And on FreeBSD, you can easily mount
> it with the -t msdos type. Just make sure that you use /dev/da0 or
> /dev/da0s1 (some cameras are tricky and initialize the card as
> /dev/da0 instead of /dev/da0s1, I never understood why).
The problem is, on fbsd I _can't_ mount it.
# dd if=/dev/zero of=/dev/da0 bs=1K count=1K
1024+0 records in
1024+0 records out
1048576 bytes transferred in 0.507045 secs (2068012 bytes/sec)
put card in camera and format it
# gpart show -r /dev/da0
=> 63 120944577 da0 MBR (58G)
63 32705 - free - (16M)
32768 120911872 1 7 [active] (58G)
# mount -t msdosfs /dev/da0s1 /mnt/memstick
mount_msdosfs: /dev/da0s1: Invalid argument
The card is readable by windows, however.
Gary
More information about the freebsd-questions
mailing list