2005年3月27日

如何複製數位相機上的照片到_Linux_上

如何複製數位相機上的照片到 Linux 上

在 326 大逛街的情形下,拗了我弟的 Sony W1 DSC 去拍了一些逛街記錄,拍完後當然要想辦法存到電腦上去。先前在 Windows 2000 作業系統時必須安裝 Sony 所提供的 Driver,但是要下載那個 Driver 並不是那麼容易;雖然 Windows XP 後可以提供對該 DSC 的支援,可是我沒有 XP,最後把腦筋動到 Linux 上。

當透過 USB 接上 Linux 時,Linux 馬上偵測到 DSC 的存在:

/var/log/message
Mar 27 09:55:14 www usb 2-1: new full speed USB device using ohci_hcd and address 4
Mar 27 09:55:14 www usb 2-1: not running at top speed; connect to a high speed hub
Mar 27 09:55:14 www Initializing USB Mass Storage driver…
Mar 27 09:55:14 www scsi0 : SCSI emulation for USB Mass Storage devices
Mar 27 09:55:14 www usbcore: registered new driver usb-storage
Mar 27 09:55:14 www USB Mass Storage support registered.
Mar 27 09:55:14 www usb-storage: device found at 4
Mar 27 09:55:14 www usb-storage: waiting for device to settle before scanning
Mar 27 09:55:19 www Vendor: Sony      Model: Sony DSC          Rev: 5.00
Mar 27 09:55:19 www Type:   Direct-Access                      ANSI SCSI revision: 00
Mar 27 09:55:19 www SCSI device sda: 487936 512-byte hdwr sectors (250 MB)
Mar 27 09:55:19 www sda: Write Protect is off
Mar 27 09:55:19 www sda: Mode Sense: 00 00 00 00
Mar 27 09:55:19 www sda: assuming drive cache: write through
Mar 27 09:55:19 www SCSI device sda: 487936 512-byte hdwr sectors (250 MB)
Mar 27 09:55:19 www sda: Write Protect is off
Mar 27 09:55:19 www sda: Mode Sense: 00 00 00 00
Mar 27 09:55:19 www sda: assuming drive cache: write through
Mar 27 09:55:19 www sda: sda1
Mar 27 09:55:19 www Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
Mar 27 09:55:19 www Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0,  type 0
Mar 27 09:55:19 www usb-storage: device scan complete
Mar 27 09:55:19 www scsi.agent[14553]: disk at /devices/pci0000:00/0000:00:10.0/0000:04:07.1/usb2/2-1/2-1:1.0/host0/target0:0:0/0:0:0:0

dmesg 記錄
usb 2-1: new full speed USB device using ohci_hcd and address 4
usb 2-1: not running at top speed; connect to a high speed hub
Initializing USB Mass Storage driver…
scsi0 : SCSI emulation for USB Mass Storage devices
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
usb-storage: device found at 4
usb-storage: waiting for device to settle before scanning
  Vendor: Sony      Model: Sony DSC          Rev: 5.00
  Type:   Direct-Access                      ANSI SCSI revision: 00
SCSI device sda: 487936 512-byte hdwr sectors (250 MB)
sda: Write Protect is off
sda: Mode Sense: 00 00 00 00
sda: assuming drive cache: write through
SCSI device sda: 487936 512-byte hdwr sectors (250 MB)
sda: Write Protect is off
sda: Mode Sense: 00 00 00 00
sda: assuming drive cache: write through
 sda: sda1
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0,  type 0
usb-storage: device scan complete

當 Kernel 捕捉到上述訊息後,表示 Camera 上的照片集已可使用,只要 mount 上來即可。mount 後檢查一下是不是 mount 到正確的裝置。

www mnt # mount /dev/sda1 /mnt/camera/
www mnt # ls camera
dcim  memstick.ind  misc  mstk_pro.ind
www mnt #

DSC 的相片似乎會統一放在 dcim/ 目錄下的某個子目錄:

www mnt # ls camera/dcim/
101msdcf
www mnt # ls camera/dcim/101msdcf/
dsc00003.jpg  dsc00043.jpg  dsc00074.jpg  dsc00156.jpg  dsc00173.jpg
dsc00005.jpg  dsc00045.jpg  dsc00075.jpg  dsc00157.jpg  dsc00174.jpg
dsc00010.jpg  dsc00046.jpg  dsc00076.jpg  dsc00158.jpg  dsc00175.jpg
dsc00011.jpg  dsc00047.jpg  dsc00081.jpg  dsc00159.jpg  dsc00176.jpg
dsc00013.jpg  dsc00048.jpg  dsc00083.jpg  dsc00160.jpg  dsc00177.jpg
dsc00016.jpg  dsc00049.jpg  dsc00085.jpg  dsc00161.jpg  dsc00178.jpg
dsc00018.jpg  dsc00050.jpg  dsc00087.jpg  dsc00162.jpg  dsc00179.jpg
dsc00025.jpg  dsc00051.jpg  dsc00089.jpg  dsc00163.jpg  dsc00180.jpg
dsc00027.jpg  dsc00053.jpg  dsc00090.jpg  dsc00164.jpg  dsc00181.jpg
dsc00029.jpg  dsc00054.jpg  dsc00091.jpg  dsc00165.jpg  dsc00182.jpg
dsc00032.jpg  dsc00055.jpg  dsc00092.jpg  dsc00166.jpg  dsc00183.jpg
dsc00036.jpg  dsc00056.jpg  dsc00093.jpg  dsc00167.jpg  dsc00184.jpg
dsc00037.jpg  dsc00057.jpg  dsc00094.jpg  dsc00168.jpg  dsc00185.jpg
dsc00038.jpg  dsc00060.jpg  dsc00095.jpg  dsc00169.jpg  dsc00186.jpg
dsc00039.jpg  dsc00066.jpg  dsc00153.jpg  dsc00170.jpg  dsc00187.jpg
dsc00041.jpg  dsc00067.jpg  dsc00154.jpg  dsc00171.jpg  dsc00188.jpg
dsc00042.jpg  dsc00070.jpg  dsc00155.jpg  dsc00172.jpg  dsc00189.jpg
www mnt #
再來本只需將檔案複製出來即可,不過因為這個裝置不能改變存取權限,因此一般使用者恐怕無法存取到這個被 mount 上來的目錄(沒有 x 權限):
ada@www 326大逛街 $ ls -al /mnt/
總計 37
drwxr-xr-x   6 root root    168  3月 27 10:12 .
drwxr-xr-x  24 root root    592  3月 27 01:44 ..
drwxr--r--   4 root root  16384  1月  1  1970 camera
drwx------   2 root root     72 10月 28 05:38 cdrom
drwx------   2 root root     72 10月 28 05:38 floppy
drwxr-xr-x   5 ada  users  4096  3月 27 01:37 hdd1
-rw-r--r--   1 root root      0  3月 20 03:14 .keep
USB 裝置的權限似乎是固定的,解決之道是在 mount 時直接指定擁有者的身份:
www mnt # id ada
uid=1000(ada) gid=100(users) groups=100(users),10(wheel),16(cron),18(audio),19(cdrom),27(video),35(games),85(usb)
www mnt # mount -o uid=1000,gid=100 /dev/sda1 camera
www mnt # ls -al camera/
total 96
drwxr--r--  4 ada  users 16384 Jan  1  1970 .
drwxr-xr-x  6 root root    168 Mar 27 10:12 ..
drwxr--r--  3 ada  users 32768 Dec  1 19:39 dcim
-r-xr--r--  1 ada  users     0 Jan  1  1980 memstick.ind
drwxr--r--  2 ada  users 32768 Dec  1 19:39 misc
-r-xr--r--  1 ada  users     0 Jan  1  1980 mstk_pro.ind
www mnt #

好了,趕快把照片複製出來吧!

參考資料:

  1. A brief HOWTO or Tutorial for using the Sony DSC-W1 in Linux:想使用影像處理軟體直接處理 DSC 上的照片,這篇 blog 有很全面性的說明。
備註:
  1. 要讓 Kernel 自動偵測到數位相機上的儲存空間,好像得在 kernel 中加入 usb massstorage 及 scsi emulation 支援。(待查)