xref: /aosp_15_r20/external/exfatprogs/README.md (revision 508ec739de867a7549a0b8584942a00612dc5f1c)
1*508ec739SDaniel Rosenberg
2*508ec739SDaniel Rosenberg## exfatprogs
3*508ec739SDaniel RosenbergAs new exfat filesystem is merged into linux-5.7 kernel, exfatprogs is
4*508ec739SDaniel Rosenbergcreated as an official userspace utilities that contain all of the standard
5*508ec739SDaniel Rosenbergutilities for creating and fixing and debugging exfat filesystem in linux
6*508ec739SDaniel Rosenbergsystem. The goal of exfatprogs is to provide high performance and quality
7*508ec739SDaniel Rosenbergat the level of exfat utilities in windows. And this software is licensed
8*508ec739SDaniel Rosenbergunder the GNU General Public License Version 2.
9*508ec739SDaniel Rosenberg
10*508ec739SDaniel Rosenberg## Building exfatprogs
11*508ec739SDaniel RosenbergInstall prerequisite packages:
12*508ec739SDaniel Rosenberg```
13*508ec739SDaniel RosenbergFor Ubuntu:
14*508ec739SDaniel Rosenberg    sudo apt-get install autoconf libtool pkg-config
15*508ec739SDaniel Rosenberg
16*508ec739SDaniel RosenbergFor Fedora, RHEL:
17*508ec739SDaniel Rosenberg    sudo yum install autoconf automake libtool
18*508ec739SDaniel Rosenberg```
19*508ec739SDaniel Rosenberg
20*508ec739SDaniel RosenbergBuild steps:
21*508ec739SDaniel Rosenberg```
22*508ec739SDaniel Rosenberg    cd into the exfatprogs directory:
23*508ec739SDaniel Rosenberg    ./autogen.sh
24*508ec739SDaniel Rosenberg    ./configure
25*508ec739SDaniel Rosenberg    make
26*508ec739SDaniel Rosenberg    make install
27*508ec739SDaniel Rosenberg```
28*508ec739SDaniel Rosenberg
29*508ec739SDaniel Rosenberg## Using exfatprogs
30*508ec739SDaniel Rosenberg```
31*508ec739SDaniel Rosenberg- mkfs.exfat:
32*508ec739SDaniel Rosenberg    Build a exfat filesystem on a device or partition(e.g. /dev/hda1, dev/sda1).
33*508ec739SDaniel Rosenberg
34*508ec739SDaniel RosenbergUsage example:
35*508ec739SDaniel Rosenberg    1. No option(default) : cluster size adjustment as per device size, quick format.
36*508ec739SDaniel Rosenberg        mkfs.exfat /dev/sda1
37*508ec739SDaniel Rosenberg    2. To change cluster size(KB or MB or Byte) user want
38*508ec739SDaniel Rosenberg        mkfs.exfat -c 1048576 /dev/sda1
39*508ec739SDaniel Rosenberg        mkfs.exfat -c 1024K /dev/sda1
40*508ec739SDaniel Rosenberg        mkfs.exfat -c 1M /dev/sda1
41*508ec739SDaniel Rosenberg    3. For full format(zero out)
42*508ec739SDaniel Rosenberg        mkfs.exfat -f /dev/sda1
43*508ec739SDaniel Rosenberg    4. For set volume label, use -l option with string user want.
44*508ec739SDaniel Rosenberg        mkfs.exfat -L "my usb" /dev/sda1
45*508ec739SDaniel Rosenberg    5. To change boundary alignment(KB or MB or Byte) user want
46*508ec739SDaniel Rosenberg        mkfs.exfat -b 16777216 /dev/sda1
47*508ec739SDaniel Rosenberg        mkfs.exfat -b 16384K /dev/sda1
48*508ec739SDaniel Rosenberg        mkfs.exfat -b 16M /dev/sda1
49*508ec739SDaniel Rosenberg
50*508ec739SDaniel Rosenberg- fsck.exfat:
51*508ec739SDaniel Rosenberg    Check the consistency of your exfat filesystem and optionally repair a corrupted device formatted by exfat.
52*508ec739SDaniel Rosenberg
53*508ec739SDaniel RosenbergUsage example:
54*508ec739SDaniel Rosenberg    1. check the consistency.
55*508ec739SDaniel Rosenberg        fsck.exfat /dev/sda1
56*508ec739SDaniel Rosenberg    2. repair a corrupted device and create files in /LOST+FOUND, which have clusters allocated but not belonged to any files when reparing the device.
57*508ec739SDaniel Rosenberg        fsck.exfat -p -s /dev/sda1
58*508ec739SDaniel Rosenberg    3. repair a corrupted device in the same way above, but answering yes to all questions.
59*508ec739SDaniel Rosenberg        fsck.exfat -y -s /dev/sda1
60*508ec739SDaniel Rosenberg
61*508ec739SDaniel Rosenberg- tune.exfat:
62*508ec739SDaniel Rosenberg    Adjust tunable filesystem parameters on an exFAT filesystem
63*508ec739SDaniel Rosenberg
64*508ec739SDaniel RosenbergUsage example:
65*508ec739SDaniel Rosenberg    1. print current volume label.
66*508ec739SDaniel Rosenberg        tune.exfat -l /dev/sda1
67*508ec739SDaniel Rosenberg    2. set new volume label.
68*508ec739SDaniel Rosenberg        tune.exfat -L "new label" /dev/sda1
69*508ec739SDaniel Rosenberg    3. print current volume serial.
70*508ec739SDaniel Rosenberg        tune.exfat -i /dev/sda1
71*508ec739SDaniel Rosenberg    4. set new volume serial.
72*508ec739SDaniel Rosenberg        tune.exfat -I 0x12345678 /dev/sda1
73*508ec739SDaniel Rosenberg
74*508ec739SDaniel Rosenberg- exfatlabel:
75*508ec739SDaniel Rosenberg    Get or Set volume label or serial
76*508ec739SDaniel Rosenberg
77*508ec739SDaniel RosenbergUsage example:
78*508ec739SDaniel Rosenberg    1. get current volume label.
79*508ec739SDaniel Rosenberg        exfatlabel /dev/sda1
80*508ec739SDaniel Rosenberg    2. set new volume label.
81*508ec739SDaniel Rosenberg        exfatlabel /dev/sda1 "new label"
82*508ec739SDaniel Rosenberg    3. get current volume serial.
83*508ec739SDaniel Rosenberg        exfatlabel -i /dev/sda1
84*508ec739SDaniel Rosenberg    4. set new volume serial.
85*508ec739SDaniel Rosenberg        exfatlabel -i /dev/sda1 0x12345678
86*508ec739SDaniel Rosenberg
87*508ec739SDaniel Rosenberg- dump.exfat:
88*508ec739SDaniel Rosenberg    Show on-disk information
89*508ec739SDaniel Rosenberg
90*508ec739SDaniel RosenbergUsage example:
91*508ec739SDaniel Rosenberg    dump.exfat /dev/sda1
92*508ec739SDaniel Rosenberg
93*508ec739SDaniel Rosenberg- exfat2img:
94*508ec739SDaniel Rosenberg    Dump metadata of an exFAT filesystem
95*508ec739SDaniel Rosenberg
96*508ec739SDaniel RosenbergUsage example:
97*508ec739SDaniel Rosenberg    exfat2img -o sda1.dump /dev/sda1
98*508ec739SDaniel Rosenberg
99*508ec739SDaniel Rosenberg```
100*508ec739SDaniel Rosenberg
101*508ec739SDaniel Rosenberg## Benchmarks
102*508ec739SDaniel Rosenberg
103*508ec739SDaniel RosenbergSome fsck implementations were tested and compared for Samsung 64GB Pro
104*508ec739SDaniel RosenbergmicroSDXC UHS-I Class 10 which was filled up to 35GB with 9948 directories
105*508ec739SDaniel Rosenbergand 16506 files by fsstress.
106*508ec739SDaniel Rosenberg
107*508ec739SDaniel RosenbergThe difference in the execution time for each testing is very small.
108*508ec739SDaniel Rosenberg
109*508ec739SDaniel Rosenberg
110*508ec739SDaniel Rosenberg| Implementation       | version         | execution time (seconds) |
111*508ec739SDaniel Rosenberg|----------------------|-----------------|--------------------------|
112*508ec739SDaniel Rosenberg| **exfatprogs fsck**  | 1.0.4           | 11.561                   |
113*508ec739SDaniel Rosenberg| Windows fsck         | Windows 10 1809 | 11.449                   |
114*508ec739SDaniel Rosenberg| [exfat-fuse fsck]    | 1.3.0           | 68.977                   |
115*508ec739SDaniel Rosenberg
116*508ec739SDaniel Rosenberg[exfat-fuse fsck]: https://github.com/relan/exfat
117*508ec739SDaniel Rosenberg
118*508ec739SDaniel Rosenberg## Sending feedback
119*508ec739SDaniel RosenbergIf you have any issues, please create [issues][1] or contact to [Namjae Jeon](mailto:[email protected]) and
120*508ec739SDaniel Rosenberg[Hyunchul Lee](mailto:[email protected]).
121*508ec739SDaniel Rosenberg[Contributions][2] are also welcome.
122*508ec739SDaniel Rosenberg
123*508ec739SDaniel Rosenberg[1]: https://github.com/exfatprogs/exfatprogs/issues
124*508ec739SDaniel Rosenberg[2]: https://github.com/exfatprogs/exfatprogs/pulls
125*508ec739SDaniel Rosenberg
126*508ec739SDaniel Rosenberg## Contributor information
127*508ec739SDaniel Rosenberg* Please base your pull requests on the `exfat-next` branch.
128*508ec739SDaniel Rosenberg* Make sure you add 'Signed-Off' information to your commits (e.g. `git commit --signoff`).
129*508ec739SDaniel Rosenberg* Please check your code contribution using kernel dev-tool script [checkpatch](https://docs.kernel.org/dev-tools/checkpatch.html).
130