Date: Sun, 15 Mar 2020 19:06:22 -0600 From: Gary Aitken <freebsd@dreamchaser.org> To: Polytropon <freebsd@edvax.de> Cc: FreeBSD Mailing List <freebsd-questions@freebsd.org> Subject: Re: SD card formatting Message-ID: <90f83226-b557-98c4-749b-81d9dbd795c3@dreamchaser.org> In-Reply-To: <20200316000029.a6ba47c9.freebsd@edvax.de> References: <b7070f0e-a387-9c7e-945f-ab708f9f5a76@dreamchaser.org> <20200316000029.a6ba47c9.freebsd@edvax.de>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?90f83226-b557-98c4-749b-81d9dbd795c3>