查看: 342|回复: 2
打印 上一主题 下一主题

BananLinux中exFat文件系统的使用

[复制链接] qrcode

29

主题

31

帖子

94

积分

注册会员

Rank: 2

积分
94
楼主
跳转到指定楼层
发表于 2015-7-11 11:56 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

首先安装BananaLinux多说了,官方文档照着做就行了,装好后记得bananian-config一下。

系统的安装与优化下次再总结性的在一个帖子里讲。今天先谈增加Exfat驱动支持的问题。

总体来说exFat优点是:

1.Windows支持(WinCe支持,WinXP需要补丁支持,Win7以上原生支持)。

2.更适合U盘系统,FAT32不支持4G以上大文件,NTFS的日志系统太伤存储了,所以对于64G以上的U盘,微软都是推荐exFat系统的。

3.简单耐用,根据我在PPC上的测试,exFat可以高速写文件的过程中经历几千次随机掉电后正常使用,即使出现单个文件故障也不影响分区的挂载和其他目录的使用;Ext3可以经历几百次,出现故障后还是要fsck来修复;NTFS经历百十次就不错了。

Exfat驱动是三星贡献的,在GitHub上有,但是由于微软的版权因素,一般Linux是不带这个驱动的。

尝试一下:

root[@bananapi:13896] /# mount -t exfat /dev/sda1 /mnt
mount: unknown filesystem type \'exfat\'

BananaLinux不支持。

编译驱动前,先要安装好gcc,linux-header之类的一堆包,这里把源码附上来:

PS:改文件来编译过程中,可能反复修改,截图太麻烦,所以下面都是复制SecureCRT的日志来说明。


下载好驱动源码就可以编译了,进入驱动目录Make

root[@bananapi:13896] /home/exfat/driver # make
make -C /lib/modules/3.4.104-bananian/build M=/home/exfat/driver modules
make[1]: Entering directory `/usr/src/linux-headers-3.4.104-bananian\'
  CC [M]  /home/exfat/driver/exfat.o
  CC [M]  /home/exfat/driver/exfat_api.o
  CC [M]  /home/exfat/driver/exfat_blkdev.o
  CC [M]  /home/exfat/driver/exfat_cache.o
  CC [M]  /home/exfat/driver/exfat_data.o
  CC [M]  /home/exfat/driver/exfat_global.o
  CC [M]  /home/exfat/driver/exfat_nls.o
  CC [M]  /home/exfat/driver/exfat_oal.o
  CC [M]  /home/exfat/driver/exfat_upcase.o
  CC [M]  /home/exfat/driver/exfat_super.o
  LD [M]  /home/exfat/driver/exfat_core.o
  LD [M]  /home/exfat/driver/exfat_fs.o
  Building modules, stage 2.
  MODPOST 2 modules
  CC      /home/exfat/driver/exfat_core.mod.o
  LD [M]  /home/exfat/driver/exfat_core.ko
  CC      /home/exfat/driver/exfat_fs.mod.o
  LD [M]  /home/exfat/driver/exfat_fs.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.4.104-bananian\'
make  26.02s user 2.73s system 91% cpu 31.366 total
root[@bananapi:13896] /home/exfat/driver # 

在make install就好了

接下来是加载驱动


root[@bananapi:13896] / # modprobe exfat_core
root[@bananapi:13896] / # modprobe exfat_fs  



查看系统装载的驱动是否成功

root[@bananapi:13896] ~ # lsmod
Module                  Size  Used by
cpufreq_conservative     5966  0 
cpufreq_powersave       1197  0 
cpufreq_userspace       3294  0 
cpufreq_stats           5901  0 
exfat_fs               18469  0 
exfat_core             81817  1 exfat_fs
ap6210                584108  0 
cfg80211              173441  1 ap6210
8021q                  18594  0 
garp                    6114  1 8021q
stp                     1993  1 garp
llc                     5491  2 stp,garp



如果希望在系统启动时自动加载驱动就需要

root[@bananapi:13896] / # vi /etc/modules 

在其中添加

exfat_core

exfat_fs  


接下来就可以挂载U盘(事先用Windows格式化成exFat分区)
 root[@bananapi:13896] ~ # mount -t exfat /dev/sda1 /mnt                                                                          
root[@bananapi:13896] ~ # df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          3.7G  1.8G  1.7G  52% /
/dev/root       3.7G  1.8G  1.7G  52% /
devtmpfs        486M     0  486M   0% /dev
tmpfs            98M  1.2M   96M   2% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           195M     0  195M   0% /run/shm
/dev/sda1       3.7G   96K  3.7G   1% /mnt
挂载成功,容量3.7G,那么再来哥速度测试。

root[@bananapi:13896] /mnt # dd if=/dev/zero of=test.dat bs=1024 count=100k
102400+0 records in
102400+0 records out
104857600 bytes (105 MB) copied, 18.6473 s, 5.6 MB/s

本地读写速度5.6M,还可以。


为了避免每次都要敲命令使用麻烦,还是使用udev进行自动挂载。

新建一个udev规则:

root[@bananapi:13896] ~ # touch /etc/udev/rules.d/S10_USB.rules
内容如下:
KERNEL!="sd[a-z][0-9]", GOTO="Exit"

IPORT{program}="/sbin/blkid -o udev -p %N"

#Plug In
#fat32
ACTION=="add",ENV{ID_FS_TYPE}=="vfat", RUN+="/bin/mkdir -p /mnt/usb-%k", RUN+="/bin/mount -t vfat  /dev/%k /mnt/usb-%k"
#exfat
ACTION=="add",ENV{ID_FS_TYPE}=="exfat", RUN+="/bin/mkdir -p /mnt/usb-%k", RUN+="/bin/mount -t exfat  /dev/%k /mnt/usb-%k"
#ntfs
ACTION=="add",ENV{ID_FS_TYPE}=="ntfs", RUN+="/bin/mkdir -p /mnt/usb-%k", RUN+="/sbin/mount.ntfs-3g /dev/%k /mnt/usb-%k"


#Unplug
ACTION=="remove", ENV{dir_name}!="",  RUN+="/bin/umount -l /mnt/usb-%k",  RUN+="/bin/rmdir /mnt/usb-%k"

#Exit
LABEL="Exit"
保存后,重新插入U盘,看一下系统日志。
root[@bananapi:13896] /home # dmesg
[ 2274.638618] ehci_irq: port change detect
[ 2274.642658] usb 1-1: USB disconnect, device number 3
[ 2276.881770] ehci_irq: port change detect
[ 2277.157684] usb 1-1: new high-speed USB device number 4 using sw-ehci
[ 2277.415818] usb 1-1: New USB device found, idVendor=058f, idProduct=6387
[ 2277.436036] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2277.453216] usb 1-1: Product: CoolFlash
[ 2277.467183] usb 1-1: Manufacturer: Teclast
[ 2277.481371] usb 1-1: SerialNumber: 7532E5D0
[ 2277.499631] scsi5 : usb-storage 1-1:1.0
[ 2278.511952] scsi 5:0:0:0: Direct-Access     Teclast  CoolFlash        8.07 PQ: 0 ANSI: 2
[ 2278.536596] sd 5:0:0:0: Attached scsi generic sg0 type 0
[ 2278.543040] sd 5:0:0:0: [sda] 7720960 512-byte logical blocks: (3.95 GB/3.68 GiB)
[ 2278.547450] sd 5:0:0:0: [sda] Write Protect is off
[ 2278.556752] sd 5:0:0:0: [sda] Mode Sense: 03 00 00 00
[ 2278.561719] sd 5:0:0:0: [sda] No Caching mode page found
[ 2278.574223] sd 5:0:0:0: [sda] Assuming drive cache: write through
[ 2278.587101] sd 5:0:0:0: [sda] No Caching mode page found
[ 2278.592200] sd 5:0:0:0: [sda] Assuming drive cache: write through
[ 2278.629059]  sda: sda1
[ 2278.663169] sd 5:0:0:0: [sda] No Caching mode page found
[ 2278.686744] sd 5:0:0:0: [sda] Assuming drive cache: write through
[ 2278.704728] sd 5:0:0:0: [sda] Attached SCSI removable disk
[ 2278.991840] [EXFAT] trying to mount...
[ 2279.026435] [EXFAT] mounted successfully

显然已经自动挂载成功。


如果有时候需要在Linux中进行格式化怎么办,mkfs命令是不起作用的,不急,接着编译格式化工具,这里的格式化工具就纯粹是个块设备的应用层读写工具了。

root[@bananapi:13896] /home/exfat/tools # ./build.sh 
rm -f *.o libexfat.a
gcc   -D_FILE_OFFSET_BITS=64   -c cluster.c -o cluster.o
gcc   -D_FILE_OFFSET_BITS=64   -c io.c -o io.o
gcc   -D_FILE_OFFSET_BITS=64   -c log.c -o log.o
gcc   -D_FILE_OFFSET_BITS=64   -c lookup.c -o lookup.o
gcc   -D_FILE_OFFSET_BITS=64   -c mount.c -o mount.o
gcc   -D_FILE_OFFSET_BITS=64   -c node.c -o node.o
gcc   -D_FILE_OFFSET_BITS=64   -c time.c -o time.o
gcc   -D_FILE_OFFSET_BITS=64   -c utf.c -o utf.o
gcc   -D_FILE_OFFSET_BITS=64   -c utils.c -o utils.o
ar rc libexfat.a cluster.o io.o log.o lookup.o mount.o node.o time.o utf.o utils.o  
ranlib libexfat.a
*********************************************************************************
rm -f *.o mkfs.exfat
gcc   -D_FILE_OFFSET_BITS=64 -I../libexfat  -c cbm.c -o cbm.o
gcc   -D_FILE_OFFSET_BITS=64 -I../libexfat  -c fat.c -o fat.o
gcc   -D_FILE_OFFSET_BITS=64 -I../libexfat  -c main.c -o main.o
gcc   -D_FILE_OFFSET_BITS=64 -I../libexfat  -c mkexfat.c -o mkexfat.o
gcc   -D_FILE_OFFSET_BITS=64 -I../libexfat  -c rootdir.c -o rootdir.o
gcc   -D_FILE_OFFSET_BITS=64 -I../libexfat  -c uct.c -o uct.o
gcc   -D_FILE_OFFSET_BITS=64 -I../libexfat  -c uctc.c -o uctc.o
gcc   -D_FILE_OFFSET_BITS=64 -I../libexfat  -c vbr.c -o vbr.o
gcc -o mkfs.exfat cbm.o fat.o main.o mkexfat.o rootdir.o uct.o uctc.o vbr.o  -L../libexfat -lexfat
cp -f mkfs.exfat /usr/local/bin
*********************************************************************************
rm -f *.o fsck.exfat
gcc   -D_FILE_OFFSET_BITS=64 -I../libexfat  -c main.c -o main.o
gcc -o fsck.exfat main.o  -L../libexfat -lexfat
cp -f fsck.exfat /usr/local/bin
*********************************************************************************

尝试使用编译好的工具格式化一下:
root[@bananapi:13896] /# mkfs.exfat /dev/sda1
PARTITION [0,eb732400] SIZE 3 GB
get volume size  3950191616 
partition size (256M,32G),cluster 32KB
sector bits 9
first sector 1
sec per cluster bits 6
Creating... seek to 0
volume size 3950191616 
sector_count 0 
write exfat super block size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
seek to 1800
volume size 3950191616 
sector_count 0 
write exfat super block size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
write exfat sector size 0x200
seek to 10000
seek to 88000
seek to 90000
seek to 98000
done.
Flushing... done.
File system created successfully.

注:这个工具我改了一点内容,大家可以去Google Code下载原版。


最后,为了更更实用,我们把/mnt目录通过SAMBA共享出来。这样比如U盘里存放好电影后,就可以用手机远程共享再观看了。

向共享中写文件,速度200KB/s~500KB/s,存寸小文件还是可以的。


从共享中读文件,速度1.5MB/s~2MB/s,看看电影是够的。

就写到这里了。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

69

帖子

14

积分

新手上路

Rank: 1

积分
14
沙发
发表于 2015-7-12 12:01 AM | 只看该作者
谢谢分享顶一个
回复 支持 反对

使用道具 举报

0

主题

79

帖子

6

积分

新手上路

Rank: 1

积分
6
板凳
发表于 2015-7-16 10:01 PM | 只看该作者
技术贴 必须顶起
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表