<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Apple Geek &#187; filesystems</title>
	<atom:link href="http://theapplegeek.ru/archives/tag/filesystems/feed" rel="self" type="application/rss+xml" />
	<link>http://theapplegeek.ru</link>
	<description>Чему ты научился сегодня?</description>
	<lastBuildDate>Sun, 06 May 2012 15:19:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Влияние шифрования AES-XTS на производительность файловых операций для диска 5400 rpm</title>
		<link>http://theapplegeek.ru/archives/5628</link>
		<comments>http://theapplegeek.ru/archives/5628#comments</comments>
		<pubDate>Mon, 22 Aug 2011 04:06:09 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[disk]]></category>
		<category><![CDATA[filesystems]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=5628</guid>
		<description><![CDATA[<p>Пришло время включить шифрование для диска 500 GB 5400 rpm и проверить производительность.</p>]]></description>
			<content:encoded><![CDATA[<p>В моём ноутбуке <a href="http://theapplegeek.ru/archives/5144" >стоит два жёстких диска</a>. Первый &#8211; <a href="http://theapplegeek.ru/archives/4208" >SSD-диск Intel X25-M G2</a> c операционной системой, уже зашифрован с помощью <a href="http://theapplegeek.ru/archives/5598" >FileVault 2</a>. Пришло время второго диска с данными, 500 GB 5400 rpm, который изначально был установлен в моём Macbook Pro 2.8 GHz.</p>
<p><span id="more-5628"></span>
<p>Disk Utility пока не может работать с <a href="http://theapplegeek.ru/archives/5608" >CoreStorage</a>, поэтому приходится использовать командно-строковую утилиту diskutil.</p>
<p>Нахожу, какой раздел мне нужно перекодировать (Data):</p>
<pre>
$ diskutil list
<small>/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.1 GB   disk2
   1:                        EFI                         209.7 MB   disk2s1
   2:                  Apple_HFS Legacy                  50.0 GB    disk2s2
   3:                  Apple_HFS Data                    449.6 GB   disk2s3</small>
</pre>
<p>Запускаю конвертирование, обязательно указываю ключевую фразу (данные не уничтожаются во время этой операции):</p>
<pre>
$ diskutil corestorage convert /dev/disk2s3 -stdinpassphrase
<small>New passphrase for converted volume: **********
...
Finished CoreStorage operation on disk2s3 Data
Encryption in progress; use `diskutil coreStorage list` for status</small>
</pre>
<p>С разделом можно работать сразу же, его шифрование производится в фоновом режиме. Процесс достаточно длительный. Я даже перевёл ноутбук в Sleep, не дождавшись окончания, но после просыпания шифрование продолжилось. Статус шифрования можно посмотреть командой (прогресс не виден, только статус Converting/Complete):</p>
<pre>
$ diskutil coreStorage list
<small>...
        Logical Volume Family 3E0D6C21-4178-4597-9F79-91E13A02E6FA
        ----------------------------------------------------------
        Sequence:               6
        Encryption Status:      Unlocked
        Encryption Type:        AES-XTS
        Encryption Context:     Present
        <b>Conversion Status:      Converting</b>
        Has Encrypted Extents:  Yes
        Conversion Direction:   forward
</small>
</pre>
<p>Когда шифрование завершится, &#8220;Conversion Status:&#8221; станет &#8220;Complete&#8221;.</p>
<p>Сделал замеры производительности до и после шифрования, результаты приведены ниже.</p>
<h3>Последовательное и случайное чтение/запись небольших файлов</h3>
<p>Без шифрования</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/01_filevault_5400.png" alt="01-filevault-5400" height="469" width="600"></p>
<p>С шифрованием</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/05_filevault_5400.png" alt="05-filevault-5400" height="469" width="600"></p>
<p>Скорость операций случайного чтения/записи почти не изменилась. Последовательных &#8211; изменилось незначительно. Интересно приведение скорости записи после шифрованию к нормальному виду (на первом графике скорость записи выше скорости чтения). Возможно шифрование привело к дефрагментации диска.</p>
<h3>Чтение/запись больших файлов размером от 1 до 10 MB</h3>
<p>Без шифрования</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/02_filevault_5400.png" alt="02-filevault-5400" height="469" width="600"></p>
<p>С шифрованием</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/06_filevault_5400.png" alt="06-filevault-5400" height="469" width="600"></p>
<p>Скорость изменилась незначительно, на глаз до 4-7%. Всплеск скорости записи после шифрования вероятно вызвано эффектом кеширования, добавляемым подсистемой шифрования.</p>
<h3>Чтение/запись больших файлов размером от 10 до 100 MB</h3>
<p>Без шифрования</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/03_filevault_5400.png" alt="03-filevault-5400" height="469" width="600"></p>
<p>С шифрованием</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/07_filevault_5400.png" alt="07-filevault-5400" height="469" width="600"></p>
<p>Кривые чтения и записи стали отличаться, на мой взгляд из-за большей ресурсоёмкости шифрования записи. Скорость записи ухудшилась на 15%, чтения &#8211; на 5%.</p>
<h3>Чтение/запись файла 200 MB</h3>
<p>Без шифрования</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/04_filevault_5400.png" alt="04-filevault-5400" height="469" width="600"></p>
<p>С шифрованием</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/08_filevault_5400.png" alt="08-filevault-5400" height="469" width="600"></p>
<p>Скорость записи ухудшилась на 8%, чтения &#8211; на 2%.</p>
<h2>Вывод</h2>
<p>При включении шифрования AES-XTS на жёстком диске 5400 rpm в ноутбуке с процессором Core 2 Duo без поддержки команд <noindex><a rel="nofollow" href="http://software.intel.com/en-us/articles/intel-advanced-encryption-standard-instructions-aes-ni/" >AES-NI</a></noindex> наблюдается ухудшение скорости записи до 15%, а скорости чтения &#8211; до 8%. Что вполне приемлемо как плата за безопасность данных.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/5628/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Влияние шифрования AES-XTS на производительность файловых операций для USB-дисков</title>
		<link>http://theapplegeek.ru/archives/5618</link>
		<comments>http://theapplegeek.ru/archives/5618#comments</comments>
		<pubDate>Fri, 19 Aug 2011 04:11:27 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[disk]]></category>
		<category><![CDATA[filesystems]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=5618</guid>
		<description><![CDATA[<p>После включения <a href="http://theapplegeek.ru/archives/5598">FileVault 2</a> на моём ноутбуке пришло время создания очередного клона диска с данными (пока незашифрованного) и я решил совместить приятное с полезным - сравнить время создания клона одного и того же раздела на одинаковые внешние USB-диски.</p>]]></description>
			<content:encoded><![CDATA[<p>Бекапы &#8211; вещь полезная. Мои мысли вы можете почитать в статьях &#8220;<a href="http://theapplegeek.ru/archives/4069" >О пользе offsite-бекапов</a>&#8221; и &#8220;<a href="http://theapplegeek.ru/archives/4059" >Клонирование диска как часть стратегии резервного копирования (SuperDuper!)</a>&#8220;.</p>
<p>После включения <a href="http://theapplegeek.ru/archives/5598" >FileVault 2</a> на моём ноутбуке пришло время создания очередного клона диска с данными (пока незашифрованного) и я решил совместить приятное с полезным &#8211; сравнить время создания клона одного и того же раздела на одинаковые внешние USB-диски.</p>
<p><span id="more-5618"></span>
<p>На первом диске я <a href="http://theapplegeek.ru/archives/5608" >создал логический том CoreStorage</a> с шифрованием AES-XTS, на втором &#8211; без шифрования. И сделал два клона оригинального незашифрованного раздела с данными на 350 GB.</p>
<p>Замечу, что тестирование не отражает реальное падение производительности на шифрование данных &#8211; скорость упирается в производительность USB-интерфейса. Но для конкретного случая оно достаточно интересно.</p>
<p>На раздел с шифрованием клонирование шло 3 часа и 26 минут с эффективной скоростью 26.12 MB/s:</p>
<p><center><br />
<img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/01_sdc.png" alt="01-sdc" height="495" width="600"><br />
</center></p>
<p>На раздел без шифрования &#8211; 3 часа и 23 минуты с эффективной скоростью 26.41 MB/s:</p>
<p><center><br />
<img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/02_sdc.png" alt="02-sdc" height="495" width="600"><br />
</center></p>
<p>Таким образом для дисков, подключаемых по USB, разница при включенном шифровании AES-XTS несущественна. Поэтому если вам не важна кроссплатформенность и вы не хотите, чтобы ваши данные попали в чужие руки, то шифрование дисков крайне рекомендую.</p>
<p>К сожалению, пока Disk Utility не поддерживает работу с томами CoreStorage, и зашифрованные разделы нужно <a href="http://theapplegeek.ru/archives/5608" >создавать вручную</a>.</p>
<p>Пока только при настройке диска для Time Machine я видел возможность включения шифрования:</p>
<p><center><br />
<img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/03_sdc.png" alt="03-sdc" height="287" width="514"><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/5618/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Базовые операции при работе с менеджером томов CoreStorage в OS X Lion</title>
		<link>http://theapplegeek.ru/archives/5608</link>
		<comments>http://theapplegeek.ru/archives/5608#comments</comments>
		<pubDate>Wed, 17 Aug 2011 15:48:28 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[disk]]></category>
		<category><![CDATA[filesystems]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=5608</guid>
		<description><![CDATA[В OS X Lion появился менеджер томов CoreStorage. Пока его возможности достаточно скромны. В дальнейшем же CoreStorage будет очень активно развиваться. Я хочу создать на новом диске два зашифрованных логических раздела. Диск пуст: $ diskutil list /dev/disk4 #: TYPE NAME SIZE IDENTIFIER 0: *500.1 GB disk4 Создаю Logical Volume Group. Синтаксис: Usage: diskutil coreStorage create [...]]]></description>
			<content:encoded><![CDATA[<p>В OS X Lion появился менеджер томов CoreStorage. Пока его возможности достаточно <noindex><a rel="nofollow" href="http://blog.fosketts.net/2011/08/04/mac-osx-lion-corestorage-volume-manager/" >скромны</a></noindex>. В дальнейшем же CoreStorage будет очень активно развиваться.</p>
<p><span id="more-5608"></span>
<p>Я хочу создать на новом диске два зашифрованных логических раздела.</p>
<p>Диск пуст:</p>
<pre>
$ diskutil list
<small>/dev/disk4
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                                                   *500.1 GB   disk4</small>
</pre>
<p>Создаю Logical Volume Group. Синтаксис:</p>
<pre>
<small>Usage:  diskutil coreStorage create lvgName
        MountPoint|DiskIdentifier|DeviceNode ...
Create a CoreStorage logical volume group from one more more disks.
The specified disks will become the initial set of PVs.
All existing data on the drive will be lost.
Ownership of the affected disk is required.
Example: diskutil coreStorage create MyLVG disk1</small>
</pre>
<p>Команда:</p>
<pre>
$ diskutil corestorage create lvgCS disk4
<small>Started CoreStorage operation
Unmounting disk4
Repartitioning disk4
Unmounting disk
Creating the partition map
Rediscovering disk4
Adding disk4s2 to Logical Volume Group
Creating Core Storage Logical Volume Group
Switching disk4s2 to Core Storage
Waiting for Logical Volume Group to appear
Discovered new Logical Volume Group "332FA822-E709-42BD-819F-38D846BBBFB2"
Core Storage LVG UUID: 332FA822-E709-42BD-819F-38D846BBBFB2
Finished CoreStorage operation</small>
</pre>
<p>Создаю зашифрованный Logical Volume. Синтаксис:</p>
<pre>
<small>Usage:  diskutil coreStorage createVolume lvgUUID type name size
        [-stdinpassphrase | -passphrase [passphrase]]
Add a new logical volume to a CoreStorage logical volume group.
Type is the file system to initialize on the new logical volume. Valid types
are Journaled HFS+ or Case-sensitive Journaled HFS+ or their aliases.
Size is the amount of space to allocate from the parent logical volume group.
Valid sizes are floating-point numbers with a suffix of B(ytes), S(512-byte-
blocks), K(ilobytes), M(egabytes), G(igabytes), T(erabytes), P(etabytes),
or (%) a percentage of the current size of the logical volume group.
Example: diskutil coreStorage createVolume
         11111111-2222-3333-4444-555555555555 jhfs+ myLV 10g</small>
</pre>
<p>Команда создания первого раздела размером в 60% от родительского LVG (UUID LVG взял в результатах предыдущей команды):</p>
<pre>
$ diskutil corestorage createvolume 332FA822-E709-42BD-819F-38D846BBBFB2 \
	jhfs+ lvCS1 60% -stdinpassphrase
<small>Passphrase for new volume: ***********
Started CoreStorage operation
Waiting for Logical Volume to appear
Formatting file system for Logical Volume
Initialized /dev/rdisk3 as a 279 GB HFS Plus volume with a 24576k journal
Mounting disk
Core Storage LV UUID: 11391E12-477A-44DA-AE48-F92B74C2512B
Core Storage disk: disk3
Finished CoreStorage operation</small>
</pre>
<p>Команда создания второго раздела размером в 40%:</p>
<pre>
$ diskutil corestorage createvolume 332FA822-E709-42BD-819F-38D846BBBFB2 \
	jhfs+ lvCS2 40% -stdinpassphrase
<small>Passphrase for new volume: ***********
Started CoreStorage operation
Waiting for Logical Volume to appear
Formatting file system for Logical Volume
Initialized /dev/rdisk5 as a 74 GB HFS Plus volume with a 8192k journal
Mounting disk
Core Storage LV UUID: B07706D0-8A64-4952-BB16-D5DEC2691687
Core Storage disk: disk5
Finished CoreStorage operation</small>
</pre>
<p>Смотрю, что получилось:</p>
<pre>
$ diskutil corestorage list
<small>+-- Logical Volume Group 332FA822-E709-42BD-819F-38D846BBBFB2
    =========================================================
    Name:         lvgCS
    Sequence:     3
    Free Space:   119907090432 B (119.9 GB)
    |
    +-&lt; Physical Volume 0C7E6C96-6890-49ED-9B70-2D66789A34CE
    |   ----------------------------------------------------
    |   Index:    0
    |   Disk:     disk4s2
    |   Status:   Online
    |   Size:     499763888128 B (499.8 GB)
    |
    +-&gt; Logical Volume Family 04AE431E-3C70-4F48-8F60-885ED7121980
    |   ----------------------------------------------------------
    |   Sequence:               2
    |   Encryption Status:      Unlocked
    |   Encryption Type:        AES-XTS
    |   Encryption Context:     Present
    |   Conversion Status:      NoConversion
    |   Has Encrypted Extents:  Yes
    |   Conversion Direction:   -none-
    |   |
    |   +-&gt; Logical Volume 11391E12-477A-44DA-AE48-F92B74C2512B
    |       ---------------------------------------------------
    |       Disk:               disk3
    |       Status:             Online
    |       Sequence:           2
    |       Size (Total):       299767734272 B (299.8 GB)
    |       Size (Converted):   -none-
    |       Revertible:         No
    |       LV Name:            lvCS1
    |       Volume Name:        lvCS1
    |       Content Hint:       Apple_HFS
    |
    +-&gt; Logical Volume Family 18E88D4F-FF92-4E31-AB2C-75F175DDAB63
        ----------------------------------------------------------
        Sequence:               2
        Encryption Status:      Unlocked
        Encryption Type:        AES-XTS
        Encryption Context:     Present
        Conversion Status:      NoConversion
        Has Encrypted Extents:  Yes
        Conversion Direction:   -none-
        |
        +-&gt; Logical Volume B07706D0-8A64-4952-BB16-D5DEC2691687
            ---------------------------------------------------
            Disk:               disk5
            Status:             Online
            Sequence:           2
            Size (Total):       79938060288 B (79.9 GB)
            Size (Converted):   -none-
            Revertible:         No
            LV Name:            lvCS2
            Volume Name:        lvCS2
            Content Hint:       Apple_HFS</small>
</pre>
<p>Размонтирую разделы через Finder, подключаю диск повторно. Разделы зашифрованы:</p>
<pre>
<small>    +-&gt; Logical Volume Family 04AE431E-3C70-4F48-8F60-885ED7121980
    |   ----------------------------------------------------------
    |   Sequence:               2
    |   <b>Encryption Status:      Locked</b>
    |   <b>Encryption Type:        AES-XTS</b>
    |   Encryption Context:     Present
    |   Conversion Status:      NoConversion
    |   Has Encrypted Extents:  Yes
    |   Conversion Direction:   -none-
    |   |
    |   +-&gt; Logical Volume 11391E12-477A-44DA-AE48-F92B74C2512B
    |       ---------------------------------------------------
    |       Disk:               -none-
    |       <b>Status:             Locked</b>
    |       Sequence:           2
    |       Size (Total):       299767734272 B (299.8 GB)
    |       Size (Converted):   -none-
    |       Revertible:         No
    |       LV Name:            lvCS1
    |       Content Hint:       Apple_HFS</small>
</pre>
<p>Можно разблокировать разделы командой &#8220;diskutil corestorage unlockvolume&#8221;, а можно ввести пароль в приглашении:</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/01_corestorage_base.png" alt="01_corestorage_base" height="294" width="544"></p>
<p>Для смены пароля нужно сначала размонтировать раздел, а потом выполнить команду:</p>
<pre>
<small>Usage:  diskutil coreStorage changeVolumePassphrase|passwd lvUUID
        [-recoverykeychain file] | [-oldpassphrase old]
        [-newpassphrase new] | [-stdinpassphrase]
Change an encrypted logical volume's password. Beyond the CoreStorage UUID,
you will be prompted interactively for parameters that you do not specify.
Parameters must be given in the above order.
Example: diskutil coreStorage changeVolumePassphrase
         11111111-2222-3333-4444-555555555555</small>
</pre>
<p>Процесс смены:</p>
<pre>
$ diskutil corestorage changeVolumePassphrase 11391E12-477A-44DA-AE48-F92B74C2512B
<small>Old passphrase:
New passphrase:
Repeat new passphrase:
Started CoreStorage operation
Logical Volume passphrase has been changed
Core Storage LV UUID: 11391E12-477A-44DA-AE48-F92B74C2512B
Finished CoreStorage operation</small>
</pre>
<p>У команды diskutil есть и скрытые команды из группы corestorage, их можно посмотреть в статье &#8220;<noindex><a rel="nofollow" href="http://blog.fosketts.net/2011/08/05/undocumented-corestorage-commands/" >Undocumented CoreStorage Commands</a></noindex>&#8220;.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/5608/feed</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>FileVault 2</title>
		<link>http://theapplegeek.ru/archives/5598</link>
		<comments>http://theapplegeek.ru/archives/5598#comments</comments>
		<pubDate>Mon, 15 Aug 2011 04:52:42 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[disk]]></category>
		<category><![CDATA[filesystems]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=5598</guid>
		<description><![CDATA[Что такое &#8220;FileVault 2&#8220;? Это усовершенствованная версия &#8220;FileVault 1&#8243;. Спасибо, Капитан Очевидность. Я, как и у многие люди, связанные с системным администрированием, немного параноик. Я считаю, что мои данные хотят украсть. Пусть они реально никому, кроме меня (&#8220;и множества злоумышленников, которые спят и видят, как получить мои фотографии, подборку музыки и фильмов, и&#8230;&#8221;, &#8211; это [...]]]></description>
			<content:encoded><![CDATA[<p>Что такое &#8220;<noindex><a rel="nofollow" href="http://support.apple.com/kb/HT4790?viewlocale=ru_RU" >FileVault 2</a></noindex>&#8220;? Это усовершенствованная версия &#8220;FileVault 1&#8243;. Спасибо, Капитан Очевидность.</p>
<p><span id="more-5598"></span></p>
<p>Я, как и у многие люди, связанные с системным администрированием, немного параноик. Я считаю, что мои данные хотят украсть. Пусть они реально никому, кроме меня (&#8220;и множества злоумышленников, которые спят и видят, как получить мои фотографии, подборку музыки и фильмов, и&#8230;&#8221;, &#8211; это слова моего внутреннего параноика) и не нужны, но защититься не помешает.</p>
<p>Что произойдёт, если ноутбук украдут?</p>
<p>Самый простой случай &#8211; вор сразу же переформатирует диск и поставит чистую версию операционной системы. Останется купить новый ноутбук, восстановиться из Time Machine и спокойно продолжить работу. Этот сценарий характерен для умного вора, который знает о функции &#8220;<noindex><a rel="nofollow" href="http://www.tuaw.com/2011/08/03/apple-opens-find-my-mac-to-beta-testing/" >Find My Mac</a></noindex>&#8221; и о <noindex><a rel="nofollow" href="http://preyproject.com/" >системе Pray</a></noindex>.</p>
<p>Но есть другой случай &#8211; вор или глуп, или любопытен. Если глуп, то начнёт пользоваться ноутбуком, не трогая систему. Недавняя история поимки такого вора описана в статье &#8220;<noindex><a rel="nofollow" href="http://infosec20.blogspot.com/2011/08/why-you-dont-steal-from-hacker.html" >Why you don&#8217;t steal from a hacker</a></noindex>&#8220;. Всё закончилось плачевно для вора и отлично для владельца ноутбука.</p>
<p>Если вор любопытен и умён, то сразу же отключит сетевые интерфейсы, чтобы даже случайно система не вышла в Интернет, и начнёт изучать, чем бы можно поживиться.</p>
<p>Начнёт изучать документы, ключи доступа, попробует добраться до Keychain, посмотрит историю команд в shell и возможно наткнётся на пароль (в моей практике был случай, когда очень быстрый коллега в сессии излишне любопытного  пользователя вбивал пароль администратора, но вбил не в поле запроса пароля, а просто в shell, и пароль администратора попал в .history). Пароль в клиническом случае может быть единым для системы и для базы 1Password. Можно дальше не продолжать. А дальше &#8211; или проникновение, или шантаж.</p>
<p>Надеюсь, вы не думаете, что запрос пароля при входе в систему кого-то остановит? Firmware Password (по крайней мере раньше) сбрасывался фокусом с вынимаем одной из нескольких планок памяти, а затем очисткой PRAM. Потом &#8211; single user mode, <noindex><a rel="nofollow" href="http://osxdaily.com/2011/04/25/change-admin-password-mac/" >пара команд</a></noindex>, и пароль изменён. Если же не хочется возиться с Firmware Password, то диск вынимается из ноутбука, подключается к другому компьютеру и доступ ко всем данным получен.</p>
<p>Для защиты от описанной ситуаций был реализован FileVault. В первой версии пользовательский домашний каталог помещался в зашифрованный контейнер (sparse bundle image), ключом к которому служил пользовательский пароль. Не зная пароля, контейнер невозможно было открыть. Не нужно исключать возможность угадывания пароля, но если пароль был сложным, то данные были в полной безопасности.</p>
<p>За безопасность нужно платить. Для того, чтобы сделать резервную копию данных в Time Machine, нужно было выйти из учётной записи. Сделать выборочное восстановление через интерфейс Time Machine было нельзя. Включение шифрования <a href="http://theapplegeek.ru/archives/3460" >ухудшало производительность файловых операций</a> порой на 50%. Были и другие мелкие сложности.</p>
<p>В OS X Lion вошла улучшенная версия &#8211; <noindex><a rel="nofollow" href="http://support.apple.com/kb/HT4790?viewlocale=ru_RU" >FileVault 2</a></noindex>, система шифрования полного диска, использующая алгоритм XTS-AES 128.</p>
<p>В процессе изучения вопроса я обращался к статьям MacFixIt &#8220;<noindex><a rel="nofollow" href="http://reviews.cnet.com/8301-13727_7-20081045-263/about-filevault-2-in-os-x-10.7-lion/" >About FileVault 2 in OS X 10.7 Lion</a></noindex>&#8221; и ArsTechnica &#8220;<noindex><a rel="nofollow" href="http://arstechnica.com/apple/reviews/2011/07/mac-os-x-10-7.ars/13" >File system changes in Lion</a></noindex>&#8220;.</p>
<p>Желающие разобраться с математическими моделями могут прочитать документ &#8220;<noindex><a rel="nofollow" href="http://grouper.ieee.org/groups/1619/email/pdf00086.pdf" >IEEE P1619TM/D16 Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices</a></noindex>&#8221; и &#8220;<noindex><a rel="nofollow" href="http://habrahabr.ru/blogs/crypto/120096/" >Не такой уж ты и страшный, XTS-AES</a></noindex>&#8220;.</p>
<p>Незашифрованными остаются раздел с EFI (интересующихся процессом обычной загрузки отсылаю к статье &#8220;<a href="http://theapplegeek.ru/archives/1329" >Процесс загрузки Apple Mac Intel</a>&#8220;) и Recovery HD:</p>
<pre>
$ diskutil list
<small>/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *160.0 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:          Apple_CoreStorage                         159.2 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3</small>
</pre>
<ol>
<li>После инициализации &#8220;железа&#8221; EFI находит Recovery HD и передаёт управление загрузчику /System/Library/CoreServices/boot.efi, находящемуся на этом разделе.</li>
<li>У загрузчика есть два варианта &#8211; запустить EfiLoginUI из com.apple.boot.x и показать стартовый экран с запросом пароля входа, или же, если была нажата комбинация Option-R &#8211; оболочку восстановления системы из com.apple.recovery.boot.</li>
<li>Ключи для расшифровки диска хранится в файле EncryptedRoot.plist.wipekey в каталоге /com.apple.boot.x/System/Library/Caches/com.apple.corestorage. Пользовательский пароль расшифровывает ключи к диску, находящийся в этом файле. Дальше они хранится в памяти, расшифровка содержимого диска производится &#8220;на лету&#8221;. Каждый раз при изменении пользовательского пароля, добавлении нового пользователя и подобных операциях EncryptedRoot.plist.wipekey перегенерируется.</li>
</ol>
<p>FileVault работает и для пользователей, входящих через OpenDirectory &#8211; их аттрибуты доступа кешируются на случай отсутствия соединения с сервером каталогов.</p>
<p>Производительность дисковых операций при включенном FileVault 2 согласно тестам <noindex><a rel="nofollow" href="http://www.anandtech.com/show/4485/back-to-the-mac-os-x-107-lion-review/18" >Anandtech</a></noindex> ухудшается не более, чем на 20-30%, что вполне приемлемо. Однако стоит учитывать, что есть <noindex><a rel="nofollow" href="http://thepracticeofcode.com/post/8681712620/macbook-air-ssd-benchmarks-2010-vs-2011-vs-lion" >зависимость от процессора и диска</a></noindex>. Новые процессоры Intel используют наборы инструкций AES-NI для ускорения работы с AES <noindex><a rel="nofollow" href="http://software.intel.com/en-us/articles/intel-advanced-encryption-standard-instructions-aes-ni/" >Intel® Advanced Encryption Standard Instructions (AES-NI)</a></noindex> и с шифрованием диска справляются лучше, чем старые процессоры Core 2 Duo. Решение каждый принимает сам на основании собственного железа.</p>
<p>При краже Mac&#8217;а получить доступ к данным будет практически невозможно (при условии сложного пароля и неочевидных ответов на вопросы восстановления ключа в Apple). Придётся просто купить новый Mac и особо не беспокоиться о компрометации паролей и использовании данных.</p>
<p>Time Machine работает теперь без необходимости выхода из учётной записи. Теперь нужно беречь данные Time Machine, а лучше размещать их в зашифрованном разделе (как это сделать, описано в статье <noindex><a rel="nofollow" href="http://www.smartapps.co/2011/08/mac-os-x-lion-filevault-2-and-time-machine-external-drive-encryption/" >Mac OS X Lion FileVault 2 and Time Machine External Drive Encryption</a></noindex>).</p>
<p>Из &#8220;особенностей&#8221; нужно помнить, что при загрузке с зажатым Option раздел &#8220;Recovery HD&#8221; будет недоступен, для загрузки с него <noindex><a rel="nofollow" href="http://support.apple.com/kb/HT4811?viewlocale=ru_RU" >нужно удерживать</a></noindex> комбинацию клавиш Command-R.</p>
<h2>Активация</h2>
<p>Активация FileVault 2 проста. System Preferences/Security &#038; Privacy/FileVault, Click the lock to make changes, Turn On FileVault. Обязательно нужно в надёжном и обязательно зашифрованном месте сохранить ключ и ответы на вопросы восстановления ключа (если выбрали его сохранение в Apple). Система предложит перезагрузиться. Сразу же при загрузке будет запрошен ваш пароль и после входа вы сразу же сможете работать. Ждать часами завершения шифрования раздела не нужно, эта операция производится в фоновом режиме пока вы полноценно работаете:</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/01_filevault.png" alt="01_filevault" /></p>
<p>С запуском iCloud появится возможность &#8220;Find My Mac&#8221;, в которой по аналогии с &#8220;Find My iPhone/iPad&#8221; при появлении Mac в сети можно отобразить сообщение с воспроизведением звукового сигнала, заблокировать Mac или даже уничтожить содержимое зашифрованного диска (могу предположить, что удаляются ключи шифрования и диск становится бесполезным массивом данных):</p>
<p><center><br />
<img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/02_filevault.png" alt="02_filevault" /><br />
</center></p>
<p>При получении команды блокировки (как только Mac станет доступен через Интернет) компьютер перезагружается, после чего запрашивается 6-ти значный код (вспомнился [троян Trojan.Win32.Buzus.hjzy](http://av-school.ru/desc/a-2117.html), который портит MBR и требует денег за код разблокировки):</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/03_filevault.png" alt="03_filevault" /></p>
<p>Удобно, не так ли?</p>
<p>Если же вы организованы и не хотите терять производительность в угоду безопасности, то достаточно создать зашифрованный sparse bundle image и хранить секретные данные там. Я описывал процесс в статье &#8220;<a href="http://theapplegeek.ru/archives/4445" >Работа с зашифрованными образами с помощью Knox (за деньги) и без него (бесплатно)</a>&#8220;.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/5598/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Доступ к каталогу Media на iPhone/iPad/iPod Touch (PhoneView)</title>
		<link>http://theapplegeek.ru/archives/3938</link>
		<comments>http://theapplegeek.ru/archives/3938#comments</comments>
		<pubDate>Sat, 05 Jun 2010 11:18:40 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[filesystems]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=3938</guid>
		<description><![CDATA[Пару дней назад я показал, как получить доступ к системной информации iPhone/iPad/iPod Touch (а именно к содержимому каталога Media для устройств без jailbreak и ко всей файловой системе для jailbreak) с Linux. Вот, например, данные на моём iPhone: $ ls -al tmp/iphone/ drwxr-xr-x 2 ole ole 68 2010-05-26 15:36 ApplicationArchives -rw-r--r-- 1 ole ole 0 [...]]]></description>
			<content:encoded><![CDATA[<p>Пару дней назад я показал, <a href="http://theapplegeek.ru/archives/3927" >как получить доступ</a> к системной информации iPhone/iPad/iPod Touch (а именно к содержимому каталога Media для устройств без jailbreak и ко всей файловой системе для jailbreak) с Linux.</p>
<p>Вот, например, данные на моём iPhone:</p>
<pre>
<small>$ ls -al tmp/iphone/
drwxr-xr-x  2 ole ole   68 2010-05-26 15:36 ApplicationArchives
-rw-r--r--  1 ole ole    0 2010-03-21 16:06 com.apple.itdbprep.postprocess.lock
-rw-r--r--  1 ole ole    0 2010-03-21 16:06 com.apple.itunes.lock_sync
drwxr-xr-x  4 ole ole  204 2010-03-21 16:09 DCIM
drwxr-xr-x  2 ole ole  102 2010-06-02 02:06 Downloads
drwxr-xr-x  2 ole ole  102 2010-04-05 20:45 iPhoneDrive
drwxr-xr-x  7 ole ole  238 2010-03-21 16:19 iTunes_Control
drwxr-xr-x  3 ole ole  170 2010-06-03 10:53 Photos
drwxr-xr-x  2 ole ole   68 2010-03-21 16:06 Podcasts
drwxr-xr-x  2 ole ole   68 2010-06-02 17:03 PublicStaging
drwxr-xr-x  2 ole ole   68 2010-03-21 16:06 Purchases
drwxr-xr-x  2 ole ole  238 2010-03-28 14:35 Recordings
drwxr-xr-x  2 ole ole  136 2010-06-03 10:53 Safari</small>
</pre>
<p><span id="more-3938"></span></p>
<p>С Mac&#8217;а это можно сделать, например, используя небесплатную программу <noindex><a rel="nofollow" href="http://www.ecamm.com/mac/phoneview/" >PhoneView</a></noindex> (мне она досталась можно сказать бесплатно пару лет назад в составе <noindex><a rel="nofollow" href="http://www.macheist.com/" >MacHeist Bundle</a></noindex>, поэтому грех ею не воспользоваться).</p>
<p>Для этого нужно включить в настройках программы &#8220;Show Entire Disk (Advanced Disk Mode)&#8221;:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/06/01_pv-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/06/01_pv-thumb.png" height="389" width="450" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Вот такие данные доступны для iPad:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/06/02_pv-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/06/02_pv-thumb.png" height="553" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Почему я не показал результат для iPhone? Недавно я поставил iPhone OS 4.0 beta 4, и PhoneView отказался к нему подключаться:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/06/03_pv-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/06/03_pv-thumb.png" height="252" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/3938/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Снятие блокировки файла в терминале</title>
		<link>http://theapplegeek.ru/archives/3632</link>
		<comments>http://theapplegeek.ru/archives/3632#comments</comments>
		<pubDate>Thu, 25 Mar 2010 11:50:16 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[filesystems]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=3632</guid>
		<description><![CDATA[Сегодня получил письмо от Algor&#8216;а с интересным вопросом: Разбирая архив на CD и DVD с фотографиями, я скопировал их все на жесткий диск. Воспользовавшись программой Tidy Up!, обнаружил массу дубликатов. Ну думаю, сейчас я их. Удалю. Да вот ничего подобного. На попытку переместить все выбранные файлы в корзину программа отвечает отказом удалить некоторые файлы в [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня получил письмо от <noindex><a rel="nofollow" href="http://photonik.ru/" >Algor</a></noindex>&#8216;а с интересным вопросом:</p>
<blockquote>
<p>Разбирая архив на CD и DVD с фотографиями, я скопировал их все на жесткий диск. Воспользовавшись программой Tidy Up!, обнаружил массу дубликатов. Ну думаю, сейчас я их. Удалю. Да вот ничего подобного. На попытку переместить все выбранные файлы в корзину программа отвечает отказом удалить некоторые файлы в связи с тем, что они (файлы) залочены. Копировались с CD и DVD со всеми их свойствами. И это в самых разных директориях и поддиректориях. Интерфейс Tidy Up! не предусматривает пакетную разлочку таких файлов, средствами Mac OS X тоже сделать ничего не удалось. Может напишешь команду в терминале как разлочить все файлы в данном директории включая все поддиректории?</p>
</blockquote>
<p>Речь шла о блокировке, которую в том числе можно сделать в Finder Get Info:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/03/01_uchg-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/03/01_uchg-thumb.png" height="570" width="359" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p><span id="more-3632"></span></p>
<p>В процессе поиска решения нашёл документ Apple KB с главой &#8220;<noindex><a rel="nofollow" href="http://support.apple.com/kb/HT1526" >Advanced tip about deleting locked files</a></noindex>&#8220;.</p>
<p>Блокировка файла в Finder обозначает установку флага uchg, также известного как &#8220;immutable flag&#8221;. Если файл заблокирован, то его нельзя удалить или изменить:</p>
<pre>
$ rm testfile.txt
override rw-r--r--  ctrld/staff uchg for testfile.txt? y
rm: testfile.txt: Operation not permitted

$ date > testfile.txt
-bash: testfile.txt: Operation not permitted
</pre>
<p>Снять флаг можно в консоли командой <noindex><a rel="nofollow" href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/chflags.1.html#//apple_ref/doc/man/1/chflags" >chflags</a></noindex>:</p>
<pre>
$ chflags nouchg testfile.txt
</pre>
<p>Если вам нужно проделать эту операцию для большого каталога и его содержимого, то нужно использовать ключ &#8220;-R&#8221;:</p>
<pre>
$ chflags -R nouchg bigdirectory
</pre>
<p>Ключи ls для просмотра флагов:</p>
<pre>
$ ls -lO testfile.txt
-rw-r--r--  1 ctrld  staff  <b>uchg</b> 0 Mar 25 10:27 testfile.txt
</pre>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/3632/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Использование SparseBundle Image для хранения базы данных Yojimbo, или как уменьшить объём бекапа</title>
		<link>http://theapplegeek.ru/archives/3602</link>
		<comments>http://theapplegeek.ru/archives/3602#comments</comments>
		<pubDate>Tue, 23 Mar 2010 09:20:56 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[disk]]></category>
		<category><![CDATA[filesystems]]></category>
		<category><![CDATA[time machine]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=3602</guid>
		<description><![CDATA[Системы хранения заметок &#8211; достаточно интересная категория программ. Я до сих пор не нашёл идеальной программы, но постепенно движусь в этом направлении. Evernote не нравится сохранением web-страниц, Together &#8211; странной дисковой активностью, Yojimbo &#8211; отсутствием программы под iPhone. Недавно в комментариях к статье &#8220;Синхронизация данных Yojimbo через Dropbox&#8221; мы с 8bituser обсуждали достоинства и недостатки [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2010/03/01_yojimbosparse-thumb1.png" height="160" align="right" width="160" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p>Системы хранения заметок &#8211; достаточно интересная категория программ. Я до сих пор не нашёл идеальной программы, но постепенно движусь в этом направлении. Evernote не нравится сохранением web-страниц, Together &#8211; странной дисковой активностью, Yojimbo &#8211; отсутствием программы под iPhone.</p>
<p>Недавно в комментариях к статье &#8220;<a href="http://theapplegeek.ru/archives/3499" >Синхронизация данных Yojimbo через Dropbox</a>&#8221; мы с <noindex><a rel="nofollow" href="http://twitter.com/8bituser" >8bituser</a></noindex> обсуждали достоинства и недостатки двух систем хранения заметок (<noindex><a rel="nofollow" href="http://www.reinventedsoftware.com/together/" >Together</a></noindex> и <noindex><a rel="nofollow" href="http://www.barebones.com/products/Yojimbo/" >Yojimbo</a></noindex>). Я приведу его аргументы в пользу Together, они очень полезны:</p>
<p><span id="more-3602"></span></p>
<blockquote>
<p>А я с Yojimbo кое-как переполз на Together. У меня файл базы был 140мб, каждый бэкап тайммашины&#8230;</p>
<p>И потом хотелось как-то на айфоне иметь доступ ко всему этому. В Together всё хранится не в базе, а открыто. Сделал его базу прямо в стандартной папке Documents (по дефолту в папке Together, которая в Documents, так не очень удобно и не красиво показалось), скрыл то, что мне не надо (там порядка 8 папок и файл Together.lock, теперь имею там каталоги Notes, Documents, Web Pages, Images и их симлинкаю на дропбокс, и таким образом всё есть на айфоне, причем быстро, не 140мб каждый раз пересылать туда-сюда, а только новые или измененные файлы.</p>
<p>Ну и достаточно удобно к этим папкам доступ из Stacks в режиме List могу открыть любой файл даже без открытого самого Together.</p>
<p>Плюс когда в Together кидаешь кусочек чего-то со страницы, он запоминает линк страницы и можно даже этот кусочек подредактировать удалив что-то или добавив.</p>
<p>Смартфолдеры тоже есть, с тэгами тоже не особо складывается, разве что для тех же смартфолдеров они нужны помимо раскрашивания.</p>
<p>Из минусов только то, что кусочки с веб-страниц кидать нужно в Shelf, а не прямо на иконку в доке, но уже привык, а всё остальное очень похоже, чуть больше удобности и гибкости. Причем у этого Shelf очень удобно быстро заметку написать или скопипастить в него.</p>
<p>Одни плюсы вобщем, переходи, чем дальше с Yojimbo тем болезненней переход :))</p>
</blockquote>
<p>Да, Yojimbo невозможно использовать на iPhone, и это его большой минус. Я до сих пор ещё не определился, оставаться ли на Yojimbo или переходить на Together. Мне больше нравится первый. Но пока я стараюсь вести заметки в обеих системах. Сравнительный анализ &#8211; это тема отдельной статьи.</p>
<p>Сейчас же я хочу показать, как можно обойти главную проблему Yojimbo, а именно то, что данные хранятся в базе данных SQLite3 в едином файле и малейшее изменение приводит к необходимости записи в Time Machine всего файла. Для небольших баз это несущественно, но если ваши данные занимают сотни мегабайт, то это становится уже ощутимой проблемой.</p>
<p>Идея проста &#8211; нужно разместить данные в SparseBundle Image. Этот образ представляет собой набор 8-ми мегабайтных файлов (band&#8217;ов), и при изменении его содержимого меняются далеко не все band&#8217;ы, что даёт возможность уменьшить объём данных, записываемых в бекап Time Machine.</p>
<h2>Подготовка SparseBundle Image</h2>
<p>Создать образ можно или через программу Disk Utility, или в консоли через <noindex><a rel="nofollow" href="http://developer.apple.com/Mac/library/documentation/Darwin/Reference/ManPages/man1/hdiutil.1.html" >hdiutil</a></noindex>. Через графический интерфейс для меня сложнее, поэтому именно этот метод я и рассмотрю :-)</p>
<p>Запускаем Disk Utility (/Applications/Utilities/Disk Utility), создаём образ:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/03/02_yojimbosparse-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/03/02_yojimbosparse-thumb.png" height="237" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Я решил разместить образ в каталоге Documents, но вы его можете расположить там, где вам удобно. Параметры такие:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/03/03_yojimbosparse-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/03/03_yojimbosparse-thumb.png" height="459" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Мне достаточно пока 100 MB, формат файловой системы стандартный &#8220;Mac OS X Extended (Journaled)&#8221;, схему разделов я привычно поменял с &#8220;<a href="http://theapplegeek.ru/archives/1370" >Apple Partition Map</a>&#8221; на &#8220;<a href="http://theapplegeek.ru/archives/1428" >GUID Partition Map</a>&#8220;. Самое главное &#8211; поставить формат образа &#8220;sparse bundle disk image&#8221;.</p>
<p>Если вы хотите секретности, то можно создать образ с шифрацией AES (128 бит вполне достаточно, но у вас могут быть другие соображения):</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/03/04_yojimbosparse2-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/03/04_yojimbosparse2-thumb.png" height="178" width="428" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Ту же самую операция можно выполнить и через консоль:</p>
<pre>
$ hdiutil create -size 100m -type SPARSEBUNDLE -imagekey \
  sparse-band-size=4096 -fs JHFS+X -volname Yojimbo -layout GPTSPUD \
  ~/Documents/Yojimbo
</pre>
<p>Так даже лучше поступить, так как можно изменить размер band&#8217;а со стандартных 8 MB до 2 MB (4096 512-байтовых блока) или даже до минимального значения 1 MB (2048 512-байтовых блока).</p>
<h3>Увеличение размера образа</h3>
<p>Размер образа я поставил 100 MB. При необходимости можно его увеличить. Через Disk Utility мне это сделать не удалось (система рапортовала, что размер изменён, затем о том, что образ не изменён):</p>
<pre>
<small>2010-03-12 17:33:14 +0200: Growing partition 0 of “Yojimbo.sparsebundle” from 100 MB to 500 MB.
2010-03-12 17:33:14 +0200: Resizing “Yojimbo.sparsebundle” was successful.
2010-03-12 17:33:26 +0200: Image “Yojimbo.sparsebundle” will not be changed.</small>
</pre>
<p>Поэтому я вернулся в любимую консоль и там это сделал быстро и логично.</p>
<p>Если образ уже примонтирован, то нужно его отмонтировать:</p>
<pre>
$ hdiutil eject /Volumes/Yojimbo
</pre>
<p>Увеличение максимального размера образа до 500 MB (обратите внимание, что размер образа увеличивается по необходимости, а не выделеятся весь заявленный размер):</p>
<pre>
$ hdiutil resize -size 500m ~/Documents/Yojimbo.sparsebundle
</pre>
<p>Если в образе было много изменений, то можно его сжать (но для данного случая это почти бессмысленно, предварительно нужно сделать <a href="http://theapplegeek.ru/archives/3520" >vacuum</a> на базу данных SQLite, и только потом сжимать образ):</p>
<pre>
$ hdiutil compact ~/Documents/Yojimbo.sparsebundle
</pre>
<p>Монтирование образа:</p>
<pre>
$ hdiutil mount ~/Documents/Yojimbo.sparsebundle
</pre>
<p>Образ также можно примонтировать, открыв его в Finder.</p>
<p>Я заодно меняю иконку для этого образа, перетаскивая png-файл, найденный в Google на иконку в Get Info:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/03/05_yojimbosparse-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/03/05_yojimbosparse-thumb.png" height="436" width="386" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Затем меняю иконку и для смонтированного образа:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/03/06_yojimbosparse-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/03/06_yojimbosparse-thumb.png" height="416" width="386" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Теперь всё красиво.</p>
<h2>Автоподключение образа при старте системы</h2>
<p>Воспользуемся небольшим трюком &#8211; для автоподключения образа нужно его поместить в Login Items пользователя. Заходим в &#8220;System Preferences/Accounts/Login Items&#8221;. Рядом открываем окно Finder с папкой Documents. Перетаскиваем образ Yojimbo.sparsebundle в список Login Items:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/03/07_yojimbosparse-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/03/07_yojimbosparse-thumb.png" height="260" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Теперь после старта системы образ будет смонтирован в точку /Volumes/Yojimbo. Если вы выбрали шифрацию, то лучше поставить автозапоминание пароля в KeyChain, иначе придётся каждый раз этот пароль вводить (но это опять-таки &#8220;up to you&#8221; &#8211; достаточно сомнительное решение вводить шифрацию, и по сути обходить эту шифрацию, ставя автоввод пароля).</p>
<h2>Перенос данных Yojimbo в SparseBundle</h2>
<p>Перед этой операцией данные уже должны быть, для чего нужно хотя бы раз запустить Yojimbo. Дальнейшие операции лучше проводить в терминале, &#8220;Alias&#8221; в Finder &#8211; это далеко не unix symbolic link. Да, из Yojimbo нужно выйти.</p>
<pre>
$ cd ~/Library/Application\ Support
</pre>
<p>Делаем резервную копию данных:</p>
<pre>
$ mv Yojimbo Yojimbo.backup
</pre>
<p>Создаём символический линк, говорящий, что все данные будут располагаться в смонтированном образе:</p>
<pre>
$ ln -s /Volumes/Yojimbo .
$ ls -al Yojimbo
<small>lrwxr-xr-x  1 ctrld  staff  16 Mar 12 18:18 Yojimbo -> /Volumes/Yojimbo</small>
</pre>
<p>Копируем все файлы, включая скрытые, начинающиеся с &#8220;.&#8221;. Сейчас перечень такой, но в других версиях он может поменяться, поэтому команду копирования возможно придётся адаптировать</p>
<pre>
$ ls -a Yojimbo.backup/
<small>.ContentIndex.version	ContentIndex.skindex	Database.sqlite		State.plist
SyncState.plist</small>
$ cp Yojimbo.backup/{.[A-Z]*,[A-Z]*} /Volumes/Yojimbo/
$ ls -a Yojimbo/
<small>.ContentIndex.version	.fseventsd		Database.sqlite		SyncState.plist
.Trashes		ContentIndex.skindex	State.plist</small>
</pre>
<p>Символический линк сделан. Запускаем Yojimbo, убеждаемся, что все данные на месте.</p>
<p>Но не беспокойтесь, если что-то пошло не так &#8211; старые данные есть в каталоге ~/Library/Application\ Support/Yojimbo.backup. Откат:</p>
<pre>
$ cd ~/Library/Application\ Support
$ rm Yojimbo
$ cp -r Yojimbo.backup Yojimbo
</pre>
<h2>Эффект от перехода на SparseBundle Image</h2>
<p>Как определить, что band поменялся? Достаточно посмотреть на время его модификации. Я сейчас покажу данные, которые я собрал для старого образа, в котором размер band был 8 MB.</p>
<p>После изменения одного комментария в 11:55 поменялись два файла &#8211; 0 и 1:</p>
<pre>
$ ls -al ~/Documents/Yojimbo.sparsebundle/bands
<b>-rw-r--r--   1 ctrld  staff  8388608 Mar 11 11:55 0</b>
<b>-rw-r--r--   1 ctrld  staff  8388608 Mar 11 11:55 1</b>
-rw-r--r--   1 ctrld  staff  8388608 Mar 11 11:26 2
-rw-r--r--   1 ctrld  staff  5386240 Mar 11 11:43 3
-rw-r--r--   1 ctrld  staff  2437120 Mar 10 20:51 5
-rw-r--r--   1 ctrld  staff   913408 Mar  9 16:21 6
-rw-r--r--   1 ctrld  staff  8388608 Mar  9 16:21 b
-rw-r--r--   1 ctrld  staff  1757184 Mar  9 16:21 c
</pre>
<p>Это значит, что в Time Machine будет помещены два файла суммарным размером 16 MB, но не весь файл базы данных 25.7 MB, как было бы без SparseBundle:</p>
<pre>
$ ls -al /Volumes/Yojimbo/Database.sqlite
-rw-r--r--@  1 ctrld  staff  26961920 Mar 11 11:50 Database.sqlite
</pre>
<p>Если уменьшить размер band до 2 MB, то количество файлов может уменьшиться. Конечно же, чем больше база данных, тем больше эффект.</p>
<h2>Копируются ли данные в Time Machine из открытого образа SparseBundle Image?</h2>
<p>Проделаю эксперимент. Запускаю Yojimbo и меняю один комментарий.</p>
<pre>
$ ls -al /Volumes/Yojimbo/Database.sqlite
-rw-r--r--@  1 ctrld  staff  26961920 Mar 11 12:00 Database.sqlite

$ ls -al ~/Documents/Yojimbo.sparsebundle/bands
<b>-rw-r--r--   1 ctrld  staff  8388608 Mar 11 12:01 0</b>
<b>-rw-r--r--   1 ctrld  staff  8388608 Mar 11 12:01 1</b>
-rw-r--r--   1 ctrld  staff  8388608 Mar 11 11:26 2
<b>-rw-r--r--   1 ctrld  staff  5386240 Mar 11 12:00 3</b>
-rw-r--r--   1 ctrld  staff  2437120 Mar 10 20:51 5
-rw-r--r--   1 ctrld  staff   913408 Mar  9 16:21 6
-rw-r--r--   1 ctrld  staff  8388608 Mar  9 16:21 b
-rw-r--r--   1 ctrld  staff  1757184 Mar  9 16:21 c
</pre>
<p>Поменялись три файла &#8211; 0, 1 и 3.</p>
<p>С помощью dtrace смотрю за файлами, которые обрабатывает демон backupd Time Machine:</p>
<pre>
open:entry backupd /Users/ctrld/Documents/Yojimbo.sparsebundle/bands/3
open:entry backupd /Users/ctrld/Documents/Yojimbo.sparsebundle/bands/0
open:entry backupd /Users/ctrld/Documents/Yojimbo.sparsebundle/bands/1
</pre>
<p>Да, при открытом образе данные помещаются в бекап (в отличие от домашнего каталога в FileVault без выхода из системы).</p>
<h2>Восстановление данных из бекапа</h2>
<p>А вот здесь моего терпения не хватило, продолжу в другой раз :-) Могу сказать, что первая попытка восстановления из бекапа прошла безупречно, но когда я начал повторять процесс, у меня возникли сложности с dtrace, и я отложил исследование.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/3602/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Влияние FileVault на производительность файловых операций. Эпилог</title>
		<link>http://theapplegeek.ru/archives/3460</link>
		<comments>http://theapplegeek.ru/archives/3460#comments</comments>
		<pubDate>Fri, 19 Feb 2010 13:12:53 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[filesystems]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=3460</guid>
		<description><![CDATA[После двухнедельного использования FileVault я перевёл свой домашний каталог на обычную схему без шифрования. Причина в том, что субъективно типичные файловые операции стали выполняться медленнее. Например, при открытии iTunes на списке приложений под iPhone процесс отрисовки иконок достаточно заметен. Были и другие случаи, которые мне доставляли дискомфорт. Мои данные не содержат каких-то критичных сведений, все [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/00_fv-thumb1.png" height="154" align="right" width="160" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p>После двухнедельного использования FileVault я перевёл свой домашний каталог на обычную схему без шифрования. Причина в том, что субъективно типичные файловые операции стали выполняться медленнее. Например, при открытии iTunes на списке приложений под iPhone процесс отрисовки иконок достаточно заметен. Были и другие случаи, которые мне доставляли дискомфорт. Мои данные не содержат каких-то критичных сведений, все пароли зашифрованы, поэтому я и откатился обратно. Сразу же почувствовал, что ноутбук стал летать.</p>
<p>Но до отката я провёл несколько тестов файловой системы программой <noindex><a rel="nofollow" href="http://www.speedtools2.com/QuickBench.html" >QuickBench</a></noindex>, чтобы показать различие в производительности при использовании FileVault и без него. Диск &#8211; штатный для MacBook Pro 2.8 GHz 500 GB 5400 rpm Hitachi.</p>
<p><span id="more-3460"></span></p>
<p>Тест чтения/записи без FileVault:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/01_fv-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/01_fv-thumb.png" height="386" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Тест чтения/записи с FileVault:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/02_fv-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/02_fv-thumb.png" height="386" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>При включенном FileVault при работе с данными чанки, из которых состоит SparseBundle Image, считываются в память и за счёт этого производится кеширование. Поэтому скорость последовательного чтения и записи, а также случайной записи высока до блоков 64 KB включительно, после чего резко падает и становится хуже, чем без использования FileVault. Особенно это проявляется для случайного чтения, которое как раз и применяется при операциях, похожих на загрузку иконок приложений в iTunes.</p>
<p>Тест чтения/записи файлов 2-10 MB без FileVault:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/03_fv-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/03_fv-thumb.png" height="386" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Тест чтения/записи файлов 2-10 MB c FileVault:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/04_fv-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/04_fv-thumb.png" height="386" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Скорость записи с включённым FileVault падает чуть ли не в 4 раза для файлов от 7 MB. Только для файлов 2 MB она высока за счёт размера чанка и кеширования. Скорость чтения не так сильно деградирует, но всё-таки процентов 15 есть.</p>
<p>Тест чтения/записи файлов 20-100 MB без FileVault:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/05_fv-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/05_fv-thumb.png" height="386" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Тест чтения/записи файлов 20-100 MB с FileVault:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/06_fv-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/06_fv-thumb.png" height="386" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Скорость записи с FileVault уменьшается процентов на 50%. Скорость чтения также страдает.</p>
<p>Делаем вывод, что некоторые операции с FileVault быстрее за счёт кеширования, но интегральная производительность хуже. Поэтому включать FileVault нужно только для тех случаев, когда это действительно необходимо. Если же вы хотите зашифровать свои данные, то лучше сделать отдельный шифрованный Sparse Bundle Image, в котором хранить только критичные данные (и не запоминать в KeyChain пароль к нему). Краткое описание, как его создать в Terminal.app, можно посмотреть в моей статье &#8220;<a href="http://theapplegeek.ru/archives/759" >Работа с образами дисков в Terminal.app (hdiutil)</a>&#8221; (это же можно сделать и через Disk Utility).</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/3460/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Поиск больших файлов и каталогов на диске (DaisyDisk)</title>
		<link>http://theapplegeek.ru/archives/3437</link>
		<comments>http://theapplegeek.ru/archives/3437#comments</comments>
		<pubDate>Thu, 18 Feb 2010 16:20:15 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[filesystems]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=3437</guid>
		<description><![CDATA[Недавно я перешёл на криптование домашнего каталога через FileVault, до этого проанализировав вопрос в статьях &#8220;Влияние FileVault на производительность файловых операций&#8221; и &#8220;Производительность FileVault при параллельной файловой активности&#8220;. Результаты были хороши. Реальное же использование криптования слегка подкорректировало моё мнение &#8211; да, с включённым FileVault система работает при определённых операциях медленнее. В итоге я понял, что [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/01_daisydisk-thumb1.png" height="147" align="right" width="148" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p>Недавно я перешёл на криптование домашнего каталога через FileVault, до этого проанализировав вопрос в статьях &#8220;<a href="http://theapplegeek.ru/archives/1905" >Влияние FileVault на производительность файловых операций</a>&#8221; и &#8220;<a href="http://theapplegeek.ru/archives/1915" >Производительность FileVault при параллельной файловой активности</a>&#8220;. Результаты были хороши. Реальное же использование криптования слегка подкорректировало моё мнение &#8211; да, с включённым FileVault система работает при определённых операциях медленнее.</p>
<p>В итоге я понял, что большинство моих данных не настолько секретно, а действительно приватные данные можно скрыть в закриптованном образе Sparse Bundle, и жертвовать производительностью ради секретности для меня смысла нет.</p>
<p><span id="more-3437"></span></p>
<p>Для того, чтобы упростить обратную конвертацию, я решил вынести самые большие каталоги временно из домашнего каталога. Привычный алгоритм выглядел просто &#8211; перенести Music, Photos, Videos, а дальше запустить консоль и, итеративно запуская &#8220;du -ks * | sort -rn&#8221;, найти оставшихся пожирателей дискового пространства.</p>
<pre>
$ cd ~
$ du -ks * | sort -rn
<small>9155148	Library
4267588	Documents
546600	Dropbox
340496	Music
7712	Woopra
100	bin
...</small>
$ cd Library
$ du -ks * | sort -rn
<small>...</small>
</pre>
<p>Этот метод хорош. Но он не из разряда &#8220;Mac Way&#8221;. И тут я вспомнил о программе <noindex><a rel="nofollow" href="http://www.daisydiskapp.com/" >DaisyDisk</a></noindex>, которая является по сути красивой заменой приведённому выше процессу. Программа платная, стоит $19.95, но для разового поиска можно использовать программу в триальном режиме. Программа хорошая, и я её купил, зная, что она не раз мне ещё пригодится.</p>
<p>Немного пройдусь по функциям DaisyDisk в приложении к моей задаче. Стартовая точка &#8211; выбор диска или каталога, который нужно проанализировать:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/02_daisydisk-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/02_daisydisk-thumb.png" height="178" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Вы видите, почему я занялся переносом &#8211; на диске осталось мало места, и провести конвертацию домашнего каталога мне вряд ли удалось. Результат работы:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/03_daisydisk-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/03_daisydisk-thumb.png" height="424" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Можно спускаться в любой каталог и смотреть, что же занимает столько места, причём, в отличие от &#8220;du -ks *&#8221;, не нужно хранить результаты сканирования предыдущих каталогов. При наведении на каталог его графическое представление начинает мерцать.</p>
<p>Представляется весь диск. Внутреннее кольцо &#8211; каталоги относительно корневого, дальше идут дочерние. Например, можно пройтись по кругам, выявляя, что же занимает больше всего места.</p>
<p>Круг первый:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/04_daisydisk-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/04_daisydisk-thumb.png" height="313" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Круг второй:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/05_daisydisk-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/05_daisydisk-thumb.png" height="309" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Круг третий:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/06_daisydisk-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/06_daisydisk-thumb.png" height="306" width="499" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>На уровне файлов можно запустить Preview, нажав пробел:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/07_daisydisk-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/07_daisydisk-thumb.png" height="326" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Да, я опечатался, написав &#8220;Треккинг в Непала&#8221;, хочется добавить в стиле юмористов &#8220;начАльника&#8221;. Но перерендерить фильм руки не доходят, тем более, что он только для себя и друзей.</p>
<p>Чтобы перейти на файл или каталог в Finder, достаточно нажать &#8221; ⌘ + Click&#8221;, и по месту решить, что делать с объектом &#8211; удалять или нет:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/08_daisydisk-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/08_daisydisk-thumb.png" height="269" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Если какие-то каталоги недоступны для пользователя, то их просканировать можно, включив режим &#8220;Суперпользователя&#8221;:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/09_daisydisk-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/09_daisydisk-thumb.png" height="145" width="389" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/10_daisydisk-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/10_daisydisk-thumb.png" height="424" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>DaisyDisk сканирует быстро весь диск. Как она это делает? Нет, она не делает это очевидным образом через проход по дереву. Она использует псевдокаталог /.vol, в котором анализирует inode:</p>
<pre>
<small>open:entry DaisyDisk /.vol/234881026/9058507
open:entry DaisyDisk /.vol/234881026/9058511
open:entry DaisyDisk /.vol/234881026/8746896
open:entry DaisyDisk /.vol/234881026/9031043</small>
</pre>
<p>В /.vol первое число обозначает Volume ID (идентификатор файловой системы), а второе &#8211; inode файла. А вот траверс файловой системы на базе inode &#8211; это отдельный вопрос.</p>
<pre>
$ ls -al /.vol/234881026/9058507
<small>total 0
drwx------   3 ctrld  wheel  102 Feb 18 08:58 .
drwxrwxrwt  27 root   wheel  918 Feb 18 17:54 ..
srwx------   1 ctrld  wheel    0 Feb 18 08:58 Render</small>
</pre>
<p><b>Следствие этого механизма сканирования</b>: выполнить нахождение больших файлов внутри каталога FileVault текущего пользователя программа не может, она отображает его как обычный SparseBundle.</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/11_daisydisk2-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/11_daisydisk2-thumb.png" height="304" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Однако решение есть &#8211; нужно просканировать не диск, а конкретный каталог, в итоге его содержимое будет проанализировано:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/02/12_daisydisk-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/02/12_daisydisk-thumb.png" height="289" width="499" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Программа проста, но тем не менее полезна. На мой взгляд она стоит каждого доллара из $19.95. Рекомендую.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/3437/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Схемы разделов в Mac OS X. GUID partition table. Часть 2 (Partition Table Header)</title>
		<link>http://theapplegeek.ru/archives/1973</link>
		<comments>http://theapplegeek.ru/archives/1973#comments</comments>
		<pubDate>Mon, 23 Nov 2009 06:25:34 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[disk]]></category>
		<category><![CDATA[filesystems]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=1973</guid>
		<description><![CDATA[В предыдущей статье &#8220;Схемы разделов в Mac OS X. GUID partition table. Часть 1 (MBR)&#8221; мы рассмотрели &#8220;Protective MBR&#8221;. Сегодня займёмся следующей структурой &#8211; Partition Table Header. Напомню, что я использую такие спецификации: Extensible Firmware Interface Specification 1.10, раздел 11.2.2, страница 367. UEFI Specification Version 2.3, раздел 5 &#8220;GUID Partition Table (GPT) Format&#8221;, страница 91. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2009/11/01_guid_pth-thumb1.png" height="131" align="right" width="150" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p>В предыдущей статье &#8220;<a href="http://theapplegeek.ru/archives/1428" >Схемы разделов в Mac OS X. GUID partition table. Часть 1 (MBR)</a>&#8221; мы рассмотрели &#8220;Protective MBR&#8221;. Сегодня займёмся следующей структурой &#8211; Partition Table Header.</p>
<p>Напомню, что я использую такие спецификации:</p>
<ul>
<li><noindex><a rel="nofollow" href="http://www.intel.com/technology/efi/main_specification.htm" >Extensible Firmware Interface Specification 1.10</a></noindex>, раздел 11.2.2, страница 367.</li>
<li><noindex><a rel="nofollow" href="http://www.uefi.org/specs/" >UEFI Specification Version 2.3</a></noindex>, раздел 5 &#8220;GUID Partition Table (GPT) Format&#8221;, страница 91.</li>
</ul>
<p>В нулевом блоке на диске находится Protective MBR. В следующем же &#8211; GUID Partition Table Header. Это структура, описывающая различные данные по диску, включая GUID для уникальной идентификации диска, адрес стартового блока массива записей о разделах, размер записи в этом массиве и т.д.</p>
<p><span id="more-1973"></span></p>
<p>Формат описан в таблице:</p>
<table cellspacing="1" cellpadding="4" border="0" id="kbtable">
<tbody>
<tr id="kbheader">
<td>Mnemonic</td>
<td>Byte</td>
<td>Length</td>
<td>Description</td>
</tr>
<tr id="odd">
<td>Signature</td>
<td>0</td>
<td>8</td>
<td>Identifies EFI-compatible partition table header. This value must contain the string “EFI PART,” 0&#215;5452415020494645.</td>
</tr>
<tr id="even">
<td>Revision</td>
<td>8</td>
<td>4</td>
<td>The revision number for this header. This revision value is not related to the UEFI Specification version. This header is version 1.0, so the correct value is 0&#215;00010000.</td>
</tr>
<tr id="odd">
<td>HeaderSize</td>
<td>12</td>
<td>4</td>
<td>Size in bytes of the GUID Partition Table Header. The HeaderSize must be greater than 92 and must be less than or equal to the logical block size.</td>
</tr>
<tr id="even">
<td>HeaderCRC32</td>
<td>16</td>
<td>4</td>
<td>CRC32 checksum for the GUID Partition Table Header structure. This value is computed by setting this field to 0, and computing the 32-bit CRC for HeaderSize bytes.</td>
</tr>
<tr id="odd">
<td>Reserved</td>
<td>20</td>
<td>4</td>
<td>Must be zero.</td>
</tr>
<tr id="even">
<td>MyLBA</td>
<td>24</td>
<td>8</td>
<td>The LBA that contains this data structure.</td>
</tr>
<tr id="odd">
<td>AlternateLBA</td>
<td>32</td>
<td>8</td>
<td>LBA address of the alternate GUID Partition Table Header.</td>
</tr>
<tr id="even">
<td>FirstUsableLBA</td>
<td>40</td>
<td>8</td>
<td>The first usable logical block that may be used by a partition described by a GUID Partition Entry.</td>
</tr>
<tr id="odd">
<td>LastUsableLBA</td>
<td>48</td>
<td>8</td>
<td>The last usable logical block that may be used by a partition described by a GUID Partition Entry.</td>
</tr>
<tr id="even">
<td>DiskGUID</td>
<td>56</td>
<td>16</td>
<td>GUID that can be used to uniquely identify the disk.</td>
</tr>
<tr id="odd">
<td>PartitionEntryLBA</td>
<td>72</td>
<td>8</td>
<td>The starting LBA of the GUID Partition Entry array.</td>
</tr>
<tr id="even">
<td>NumberOfPartitionEntries</td>
<td>80</td>
<td>4</td>
<td>The number of Partition Entries in the GUID Partition Entry array.</td>
</tr>
<tr id="odd">
<td>SizeOfPartitionEntry</td>
<td>84</td>
<td>4</td>
<td>The size, in bytes, of each the GUID Partition Entry structures in the GUID Partition Entry array. Must be a multiple of 8.</td>
</tr>
<tr id="even">
<td>PartitionEntryArrayCRC32</td>
<td>88</td>
<td>4</td>
<td>The CRC32 of the GUID Partition Entry array. Starts at PartitionEntryLBA and is computed over a byte length of NumberOfPartitionEntries * SizeOfPartitionEntry.</td>
</tr>
<tr id="odd">
<td>Reserved</td>
<td>92</td>
<td>BlockSize – 92</td>
<td>The rest of the block is reserved by UEFI and must be zero.</td>
</tr>
</tbody>
</table>
<p>За время, прошедшее <a href="http://theapplegeek.ru/archives/1428" >с прошлой статьи о GPT</a>, диск, на котором я ставил эксперименты, успел уйти под другие задачи, поэтому продолжим на флеш-драйве 8GB с GUID, разбитом на два раздела:</p>
<pre>
$ diskutil list /dev/disk3
/dev/disk3
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *8.0 GB     disk3
   1:                        EFI                         209.7 MB   disk3s1
   2:                  Apple_HFS Flash1                  4.0 GB     disk3s2
   3:                  Apple_HFS Flash2                  3.6 GB     disk3s3
</pre>
<p>Считываем Partition Table Header:</p>
<pre>
sudo dd if=/dev/disk3 of=/dev/stdout bs=512 count=1 skip=1 2>/dev/null | hexdump -C
00000000  45 46 49 20 50 41 52 54  00 00 01 00 5c 00 00 00  |EFI PART....\...|
00000010  9b 3c cb 8f 00 00 00 00  01 00 00 00 00 00 00 00  |.<..............|
00000020  ff 5f ef 00 00 00 00 00  22 00 00 00 00 00 00 00  |._......".......|
00000030  de 5f ef 00 00 00 00 00  0d 70 a7 c1 50 34 a3 40  |._.......p..P4.@|
00000040  99 45 46 0a 87 cf 8c 9a  02 00 00 00 00 00 00 00  |.EF.............|
00000050  80 00 00 00 80 00 00 00  25 4d a5 b6 00 00 00 00  |........%M......|
00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200
</pre>
<p>Напомню, что BlockSize не обязательно 512, его можно узнать для каждого конкретного случая через вызов ioctl с селектором DKIOCGETBLOCKSIZE - программу я привёл в статье "<a href="http://theapplegeek.ru/archives/1390" >Получение информации по диску через ioctl</a>". На нашем диске BlockSize=512.</p>
<ul>
<li>00-07 (0x00-0x07) 8 байт. Signature. 45 46 49 20 50 41 52 54 = "EFI PART".</li>
<li>08-11 (0x08-0x0B) 4 байт. Revision. 00 00 01 00 = 0x00010000 = Номер ревизии 1.0.</li>
<li>12-15 (0x0C-0x0F) 4 байт. HeaderSize. 5c 00 00 00 = 0x0000005c = 92 байтов.</li>
<li>16-19 (0x10-0x13) 4 байт. HeaderCRC32. 9b 3c cb 8f. Для того, чтобы вычислить CRC32, в это поле записываются нули, после чего CRC32 считается для блока размером HeaderSize, т.е. для 92 байт.</li>
</ul>
<p>Для вычисления CRC32 я воспользовался <noindex><a rel="nofollow" href="http://c.snippets.org/snip_lister.php?fname=crc_32.c" >кодом на C</a></noindex>. Пожалуй, отдельно напишу программу для разбора GPT, сейчас же воспользуюсь скомпилированным кодом и <noindex><a rel="nofollow" href="http://ridiculousfish.com/hexfiend/" >Hex Fiend</a></noindex> для "обнуления".</p>
<p>Считываем нужный нам блок в файл 1.dump:</p>
<pre>
$ sudo dd if=/dev/disk3 of=1.dump bs=512 count=1 skip=1
</pre>
<p>Считываем из него 92 байта и записываем в 2.dump (здесь поле HeaderCRC32 ещё не обнулено):</p>
<pre>
$ sudo dd if=1.dump of=2.dump ibs=1 obs=1 count=92
</pre>
<p>Запускаем Hex Fiend, обнуляем байты 0x10-0x13 и записываем в файл 3.dump:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2009/11/02_guid_pth-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2009/11/02_guid_pth-thumb.png" height="175" width="361" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>В HeaderCRC32 было значение 9B 3C CB 8F = 0x8FCB2C9B. Запускаем вычисление CRC32:</p>
<pre>
$ ./crc_32 3.dump
FFFFFFFF8FCB3C9B      92 3.dump
</pre>
<p>Что и требовалось доказать, CRC32 верен.</p>
<ul>
<li>20-23 (0x14-0x17) 4 байт. Reserved. 00 00 00 00. Все нули.</li>
<li>24-31 (0x18-0x1F) 8 байт. MyLBA. 01 00 00 00 00 00 00 00. Да, Partition Table Header начинается с 1-го блока (а MBR protective - с 0-го).</li>
<li>32-39 (0x20-0x27) 8 байт. AlternateLBA. ff 5f ef 00 00 00 00 00 = 0xEF5FFF = 15687679. Адрес альтернативной Partition Table Header. Детальнее смотрите описание к LastUsableLBA.</li>
</ul>
<p>Проверим, действительно ли по адресу AlternateLBA находится Partition Table Header:</p>
<pre>
$ dd if=/dev/disk3 of=/dev/stdout bs=512 count=1 skip=15687679 2>/dev/null | hexdump -C
00000000  45 46 49 20 50 41 52 54  00 00 01 00 5c 00 00 00  |EFI PART....\...|
00000010  fc 0d 5b f0 00 00 00 00  ff 5f ef 00 00 00 00 00  |..[......_......|
00000020  01 00 00 00 00 00 00 00  22 00 00 00 00 00 00 00  |........".......|
00000030  de 5f ef 00 00 00 00 00  0d 70 a7 c1 50 34 a3 40  |._.......p..P4.@|
00000040  99 45 46 0a 87 cf 8c 9a  df 5f ef 00 00 00 00 00  |.EF......_......|
00000050  80 00 00 00 80 00 00 00  25 4d a5 b6 00 00 00 00  |........%M......|
00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200
</pre>
<p>Да, так и есть, это копия PTH.</p>
<ul>
<li>40-47 (0x28-0x2F) 8 байт. FirstUsableLBA. 22 00 00 00 00 00 00 00 = 0x22. Посмотрите, как вычисляется размер массива Partition Entry в описании поля SizeOfPartitionEntry. Первый блок на диске занят под Protective MBR, второй - под Partition Entry Header, затем в 0x20 блоках находится Partition Entry Array, т.е. занято 0x22 блока. Адресация блоков начинается с нуля, значит разделы можно располагать на диске, начиная с блока 0x22.</li>
<li>48-55 (0x30-0x37) 8 байт. LastUsableLBA. de 5f ef 00 00 00 00 00 = 0xEF5FDE = 15687646. Последний блок, который можно использовать под разделы.</li>
</ul>
<p>Давайте посмотрим причину. Размер диска посмотрим в diskutil:</p>
<pre>
$ diskutil info /dev/disk3 | grep "Total Size:"
   Total Size:               8.0 GB (8032092160 Bytes) (exactly 15687680 512-Byte-Blocks)

TotalDiskSize = 15687680 = 0xEF6000
LastUsableLBA = 15687646 = 0xEF5FDE
AlternateLBA  = 15687679 = 0xEF5FFF
</pre>
<p>Схема GPT Partition Table показана на рисунке:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2009/11/03_guid_pth-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2009/11/03_guid_pth-thumb.png" height="267" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Alternate Partition Table Header находится в последнем блоке на диске, нумерация с нуля, т.е. она находится в блоке (TotalDiskSize - 1) = 0xEF6000 - 1 = 0xEF5FFF. Так и есть, этот адрес мы видели в поле AlternateLBA.</p>
<p>Перед Alternate Partition Table Header располагается копия Partition Entry Array размером 0x20 (смотрите комментарий к SizeOfPartitionEntry). 0xEF5FFF - 0x20 = 0xEF5FDF. Т.е. Partition Entry Array начинается с блока 0xEF5FDF, а последний блок, доступный для разделов, является 0xEF5FDE, и это значение мы видели в поле LastUsableLBA.</p>
<ul>
<li>56-71 (0x38-0x47) 16 байт. DiskGUID. 0d 70 a7 c1 50 34 a3 40 99 45 46 0a 87 cf 8c 9a. К сожалению, пока я не нашёл, как генерируется это поле.</li>
<li>72-79 (0x48-0x4F) 8 байт. PartitionEntryLBA. 02 00 00 00 00 00 00 00 = 2. Массив GUID Partition Entry начинается со второго блока диска.</li>
<li>80-83 (0x50-0x53) 4 байт. NumberOfPartitionEntries. 80 00 00 00 = 0x80 = 128. Это максимальное количество разделов на диске.</li>
<li>84-87 (0x54-0x57) 4 байт. SizeOfPartitionEntry. 80 00 00 00 = 0x80 = 128 байт. Размер каждой записи Partition Entry равен 128 байт. Имея размер массива разделов и размер записи, получаем размер массива. 0x80 x 0x80 = 0x4000 = 16384 байт = 32 блока = 0x20</li>
<li>88-91 (0x58-0x5B) 4 байт. PartitionEntryArrayCRC32. 25 4d a5 b6 = 0xB6A54D25.</li>
</ul>
<p>PartitionEntryArray начинается со второго блока и его размер 0x20 = 32 блоков:</p>
<pre>
$ sudo dd if=/dev/disk3 of=pea1.dump bs=512 count=32 skip=2
</pre>
<p>Проверяем CRC32:</p>
<pre>
$ ./crc_32 pea1.dump
FFFFFFFFB6A54D25   16384 pea1.dump
</pre>
<p>Вычисленное CRC32 совпадает с записанным в PartitionEntryArrayCRC32, всё верно.</p>
<ul>
<li>92-BlockSize (0x5C-0x1FF) 512-92=420 байт. Reserved. 00 ... 00. Все нули.</li>
</ul>
<p>Partition Table Header мы разобрали, в следующей части (последней) разберём Partition Entry Array. Заодно попробую найти, как генерируется DiskGUID.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/1973/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

