Funny, but there are many not-so-obvious motives, I’ll tell about one of them below.Today’s reasoning is the file fragmentation.
Apple’s old HFS+ is, of course, bad and ugly (it was ugly in classic Mac OS, and is still ugly in Mac OS X), but it supports some of the modern concepts such as extents.
Some reading can be found in Wikipedia:
http://en.wikipedia.org/wiki/HFS+
http://en.wikipedia.org/wiki/Extent_(file_systems)
http://en.wikipedia.org/wiki/File_fragmentation
In the ideal situation, a file can be described in file allocation table (any variant of it) with a single record, like position and length in cluster terms. It’s good for the disk (especially for spinning drives), but it is also good for all file system logic, which is involved in file operations. The more extents are used for file allocation – the more logic overhead is later needed to operate with that file.
Now it’s time for an experiment: copy a big file (OS X 10.9 distro) with Finder under OS X 10.8.4. My hard drive has a plenty of free space, by the way.
After it’s done just use a fancy tool fileXray to see what’s happened on file system layout level:
mbp:~ migun$ sudo su
Password:
sh-3.2# fileXray /Users/migun/!/OS X 10.9.dmg
path = Macintosh HD:/Users/migun/!/OS X 10.9.dmg
# Catalog File Thread Record
# Record 0 in node 48278 beginning at 512-byte sector 0x227170
parentID = 20404714
nodeName = OS X 10.9.dmg
# Catalog File Record
# Record 12 in node 62013 beginning at 512-byte sector 0xc77170
type = file
file ID = 20405288
flags = 0000000010000010
. File has a thread record in the catalog.
. File has date-added stored in Finder Info.
reserved1 = 0
createDate = Sun Jun 16 13:37:35 2013
contentModDate = Sun Jun 16 14:12:37 2013
attributeModDate = Tue Aug 20 10:03:55 2013
accessDate = Tue Aug 20 10:01:09 2013
backupDate = 0
# BSD Info
ownerID = 501 (migun)
groupID = 20 (staff)
adminFlags = 00000000
ownerFlags = 00000000
fileMode = -rw-r–r–
linkCount = 1
textEncoding = 0
reserved2 = 0
# Finder Info
fdType = 0
fdCreator = 0
fdFlags = 0000000000000000
fdLocation = (v = 0, h = 0)
opaque = 0
# Extended Finder Info
reserved1 = 0
date_added = Tue Aug 20 10:01:09 2013
extended_flags = 0000000000000000
reserved2 = 0
reserved3 = 0
# Data Fork
logicalSize = 4965827853 bytes (5.0 GB)
totalBlocks = 1212361
fork temperature = no record in Hot File B-Tree
clumpSize = 0
extents = startBlock blockCount % of file
0x1a71af4 0x800 0.17 %
0x1c58c9f 0x1000 0.34 %
0x1c5c079 0x2000 0.68 %
0x1c5fe93 0x2000 0.68 %
0x1c64311 0x2000 0.68 %
0x1c918e8 0x2000 0.68 %
0x1c93b05 0x4000 1.35 %
0x1c9d8b8 0x2000 0.68 %
0x1ca5787 0x2000 0.68 %
0x1ca8689 0x4000 1.35 %
0x1cac6b2 0x2000 0.68 %
0x1d2efd2 0x2000 0.68 %
0x1ecdcaf 0x2000 0.68 %
0x215ce83 0x2000 0.68 %
0x215efab 0x4000 1.35 %
0x216325f 0x2000 0.68 %
0x2165512 0x2000 0.68 %
0x2167809 0x2000 0.68 %
0x2171a13 0x2000 0.68 %
0x2173a29 0x2000 0.68 %
0x2175ca9 0x2000 0.68 %
0x2179a62 0x2000 0.68 %
0x21c3fb2 0x2000 0.68 %
0x21c6cc1 0x2000 0.68 %
0x21c8cd1 0x2000 0.68 %
0x21cb1d4 0x2000 0.68 %
0x21d8aa0 0x2000 0.68 %
0x21dcff3 0x2000 0.68 %
0x21e936d 0x2000 0.68 %
0x21eb36e 0x2000 0.68 %
0x21ed371 0x2000 0.68 %
0x21ef7dc 0x2000 0.68 %
0x21f17df 0x6000 2.03 %
0x21f77e2 0x6000 2.03 %
0x21fd90a 0x2000 0.68 %
0x221fa99 0xe000 4.73 %
0x2237d36 0xc000 4.05 %
0x22884a4 0x4000 1.35 %
0x228c4a6 0x2000 0.68 %
0x229ccfb 0x2000 0.68 %
0x23e14b7 0x2000 0.68 %
0x23e35f4 0xe000 4.73 %
0x23f2ff7 0x2000 0.68 %
0x23f4ff9 0x2000 0.68 %
0x23f7126 0x2000 0.68 %
0x23f9127 0x2000 0.68 %
0x240e765 0x8000 2.70 %
0x242b007 0x2000 0.68 %
0x242d00a 0x6000 2.03 %
0x245c6b2 0x8000 2.70 %
0x24d0b58 0x2000 0.68 %
0x24d2e0b 0x8000 2.70 %
0x24db22b 0xc000 4.05 %
0x24e722c 0x10000 5.41 %
0x24f722d 0xa000 3.38 %
0x250122e 0x10000 5.41 %
0x25175f2 0x4000 1.35 %
0x251b5f3 0x2000 0.68 %
0x251d740 0x4000 1.35 %
0x2521747 0x6000 2.03 %
0x252774e 0x2000 0.68 %
0x2529997 0xa000 3.38 %
0x2533c49 0x2000 0.68 %
0x2535efc 0x4000 1.35 %
0x2539f00 0x4000 1.35 %
0x253e1b2 0x2000 0.68 %
0x254046c 0x6000 2.03 %
0x2546763 0x2000 0.68 %
0x25734b5 0x6000 2.03 %
0x25794b8 0x4000 1.35 %
0x257d5e2 0x4000 1.35 %
0x25815e5 0x6000 2.03 %
0x25875e7 0x7c9 0.16 %
1212361 allocation blocks in 73 extents total.
16607.68 allocation blocks per extent on an average.
# Resource Fork
logicalSize = 0 bytes
The file was allocated with 73 extents. Now try to do the same with Files manager:
sh-3.2# fileXray /Users/migun/!/OS X 10.9.dmg
path = Macintosh HD:/Users/migun/!/OS X 10.9.dmg
# Catalog File Thread Record
# Record 184 in node 18946 beginning at 512-byte sector 0x1b4830
parentID = 20404714
nodeName = OS X 10.9.dmg
# Catalog File Record
# Record 11 in node 62013 beginning at 512-byte sector 0xc77170
type = file
file ID = 20408503
flags = 0000000010000010
. File has a thread record in the catalog.
. File has date-added stored in Finder Info.
reserved1 = 0
createDate = Sun Jun 16 13:37:35 2013
contentModDate = Sun Jun 16 14:12:37 2013
attributeModDate = Tue Aug 20 10:25:18 2013
accessDate = Tue Aug 20 10:22:10 2013
backupDate = 0
# BSD Info
ownerID = 501 (migun)
groupID = 20 (staff)
adminFlags = 00000000
ownerFlags = 00000000
fileMode = -rw-r–r–
linkCount = 1
textEncoding = 0
reserved2 = 0
# Finder Info
fdType = 0
fdCreator = 0
fdFlags = 0000000000000000
fdLocation = (v = 0, h = 0)
opaque = 0
# Extended Finder Info
reserved1 = 0
date_added = Tue Aug 20 10:22:10 2013
extended_flags = 0000000000000000
reserved2 = 0
reserved3 = 0
# Data Fork
logicalSize = 4965827853 bytes (5.0 GB)
totalBlocks = 1212361
fork temperature = no record in Hot File B-Tree
clumpSize = 0
extents = startBlock blockCount % of file
0xac38808 0x19000 8.45 %
0xad436aa 0x19000 8.45 %
0x24d2e0b 0x32000 16.89 %
0x26e1f5d 0x19000 8.45 %
0x2702f63 0x32000 16.89 %
0x2735846 0x19000 8.45 %
0x2a0ebc1 0x19000 8.45 %
0x2a4cc68 0x46fc9 23.98 %
1212361 allocation blocks in 8 extents total.
151545.12 allocation blocks per extent on an average.
# Resource Fork
logicalSize = 0 bytes
After copying with Files manager the OS X 10.9 distro was allocated with 8 extents versus 73 when copied with Finder. And that’s the today’s reason why you need a good alternative file manager.
Here’s the one: http://filesmanager.info/ 🙂