Date: Mon, 16 Mar 2020 12:36:25 -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: <3b552229-fe07-941b-2000-56036f15c0a8@dreamchaser.org> In-Reply-To: <20200316090538.27b1ecb1.freebsd@edvax.de> References: <b7070f0e-a387-9c7e-945f-ab708f9f5a76@dreamchaser.org> <20200316000029.a6ba47c9.freebsd@edvax.de> <90f83226-b557-98c4-749b-81d9dbd795c3@dreamchaser.org> <20200316090538.27b1ecb1.freebsd@edvax.de>
next in thread | previous in thread | raw e-mail | index | archive | help
On 3/16/20 2:05 AM, Polytropon wrote: > 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). Ah, that's a help, thanks. Ugh: # ntfs-3g /dev/da0s1 /mnt/memstick NTFS signature is missing. # ntfs-3g.probe --readonly /dev/da0s1 NTFS signature is missing. # 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, 124702720 sectors # file -r - < /dev/da0s1 /dev/stdin: DOS/MBR boot sector >>> 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. It shows up as mass storage, /dev/da0 in this case >> 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. Correct, it's not an unused card. It's been put in the camera, recorded on, and then put in a windows system to transfer images. > So the camera seems (!) to initialize cards as NTFS (strange, > but surely possible), but also understands FAT. That seems to be the case. Since ntfs-3g doesn't seem to like the camera-generated NTFS filesystem, it seems my best option is to try to format with the FAT it understands. > 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). Tried the following: # gpart create -s MBR /dev/da0 da0 created # gpart show -l da0 => 63 120944577 da0 MBR (58G) 63 120944577 - free - (58G) # gpart add -t fat32 -a 4K /dev/da0 da0s1 added # gpart show -l /dev/da0 => 63 120944577 da0 MBR (58G) 63 1 - free - (512B) 64 120944576 1 (null) (58G) # newfs_msdos -F 32 -A /dev/da0s1 /dev/da0s1: 120885440 sectors in 1888835 FAT32 clusters (32768 bytes/cluster) BytesPerSec=512 SecPerClust=64 ResSectors=46 FATs=2 Media=0xf0 SecPerTrack=63 Heads=255 HiddenSecs=0 HugeSectors=120944576 FATsecs=14761 RootCluster=2 FSInfo=1 Backup=2 # mount -t msdosfs /dev/da0s1 /mnt/memstick mount_msdosfs: /dev/da0s1: Invalid argument Obviously I'm missing something? >>>> 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. :-) As shown earlier, ntfs-3g won't mount it, even though it's type 7 (ntfs) Thanks for your perseverance on helping explain all this... Gary
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3b552229-fe07-941b-2000-56036f15c0a8>