Date: Mon, 16 Mar 2020 09:05:38 +0100 From: Polytropon <freebsd@edvax.de> To: freebsd@dreamchaser.org Cc: FreeBSD Mailing List <freebsd-questions@freebsd.org> Subject: Re: SD card formatting Message-ID: <20200316090538.27b1ecb1.freebsd@edvax.de> In-Reply-To: <90f83226-b557-98c4-749b-81d9dbd795c3@dreamchaser.org> References: <b7070f0e-a387-9c7e-945f-ab708f9f5a76@dreamchaser.org> <20200316000029.a6ba47c9.freebsd@edvax.de> <90f83226-b557-98c4-749b-81d9dbd795c3@dreamchaser.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 15 Mar 2020 19:06:22 -0600, Gary Aitken wrote: > 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. >From the program output presented, it seems that you're trying to mount a NTFS partition using the FAT mount option, which will not work. Try ntfs-3g (needs to be installed; mount_ntfs is no longer part of the OS). > > 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. Depending on the camera, a USB connection can show up as a mass storage device (leads to /dev/da<something>) or a MTP interface (leads to /dev/ugen<something>). In many cases, the "personality" can be seleted by the menu in the camera. > 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. The camera seems to prefer NTFS, so when you (correctly) format a card as FAT, the camera refuses to read it. However, that's the first occassion I hear about a camera that seems to use NTFS natively... not that this is impossible, it's just something I never heared about it. :-) > > 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 According to the gpart output, it's not FAT (msdosfs), but NTFS. > 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 This doesn't actually look like a "mint condition" card. A directory named "DCIM" is typically created by a camera. However, _this_ card is FAT-formatted, and therefore can be mounted with msdosfs as correctly shown above. The directory name "System Volume Information" suggests it has been in a "Windows" PC before. COnclusion: Card works both in camera an in "Windows" PC. So the camera seems (!) to initialize cards as NTFS (strange, but surely possible), but also understands FAT. All you need to do now is to replicate _that_ formatting. The output shows "FAT (32 bit)", and the partitioning also looks reasonable. You should be able to create this either with gpart + newfs_msdosfs (should be quite standard today), or the traditional way with fdisk + newfs_msdosfs (archaic, but should also still work). Sidenote: I use my camera to initialize cards, and it creates a MS-DOS (FAT) filesystem on a "s1" partition. With mount_msdosfs, I can then access it. No NTFS. > >> 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. It would be nice to see if _this_ card now is FAT or NTFS. If it's NTFS, "Windows" will of course be able to use it. On FreeBSD; you need to use nrfs_3g to mount it, though. :-) -- Polytropon Magdeburg, Germany Happy FreeBSD user since 4.0 Andra moi ennepe, Mousa, ...
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20200316090538.27b1ecb1.freebsd>