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