Активные пользователи Mac OS X наверняка помнят анонсированную 23 октября функцию Fusion Drive. Напомню, что она представляет из себя логическое объединение установленных в ваш Mac SSD и HDD. Объем единого диска будет равен сумме объемов SSD и HDD, но главные плюс — часто используемые файлы (например, ядро системы) Mac OS автоматически и прозрачно для пользователя размещает на более быстром SSD, а все прочие файлы на HDD.
Внимание!
Методика для продвинутых пользователей Mac OS X в арсенале которых аккуратное владение командной строкой, дисковой утилитой и режимом восстановления системы.
Для внедрения функции я выбрал свой MacBook, который уже ранее подвергся установке SSD вместо привода оптических дисков. Систему и домашнюю папку я разместил на SSD, а из HDD сделал отдельный раздел для папки загрузок, папки виртуальных машин и прочих тяжеловесных файлов. Хотя я и получил большой прирост в производительности системы, но со временем стал всё чаще чистить SSD, на котором периодически заканчивалось место. Количество созданных символических ссылок из домашней папки на большой диск тоже напрягало.
Так выглядела дисковая система до модернизации
[root@ibook Volumes]# df
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk0s2 59Gi 48Gi 10Gi 83% 12631725 2735773 82% /
/dev/disk1s2 232Gi 153Gi 80Gi 66% 39984428 20948470 66% /Volumes/iBookData
Переход на Fusion Drive должен устранить все неудобства связанные с раздельным использованием нескольких дисков разного объема и производительности. Файловые системы на дисках, которые объединяются в Fusion Drive, будут разрушены, поэтому необходимо перенести с них систему и все данные. Я использовал для этого внешний винчестер. Также я запланировал замену SSD другим с чуть меньшим объемом, но лучшей производительностью, поэтому переносить систему на временный диск мне не потребовалось.
Использованное железо и софт:
- MacBook Pro 13 mid 2010
- SSD 64Gb KINGSTON SVP100S264G («старый» системный диск)
- SSD 60Gb KINGSTON SVP200S360G («новый» диск взамен старого SSD)
- HDD 250Gb Hitachi HTS545025B9SA02 («большой» диск для данных)
- HDD 500Gb (временный диск)
- USB-оснастка для внешнего подключения SATA дисков
- Mac OS X 10.8.2
- Carbon Copy Cloner 3.4.5-b1, либо Time Machine + Network Recovery
- терминал (iTerm)
- WiFi интернет для Network Recovery
Все операции по настройке и переносу данных на Fusion Drive можно производить двумя способами:
а) загружаясь со «старого» SSD подключенного через USB-оснастку и позже клонируя с него систему с помощью Carbon Copy Cloner;
б) загружаясь в режим восстановления системы по сети и восставливая систему из Time Machine.
Я попробовал оба способа. Второй мне показался более изящным т.к. является встроенным и не требует дополнительного софта и внешней USB-оснастки для временной загрузки со старого системного диска.
В описании процедуры этапы относящиеся к разным способам помечены соответственно «а» и «б».
Поехали!
0. На подготовительном этапе делаем бэкап системного раздела через Time Machine, а данные с большого диска переносим на временный. Еще раз напоминаю, что в процессе создания Fusion Drive файловые системы на образующих его дисках будут разрушены.
1. Разбираем пациента и устанавливаем вместо старого новый SSD, собираем.
2а. Включаем макбук зажав Cmd+Opt+R. После появления глобуса отпускаем клавиши и ждем загрузки из интернета диска восстановления.
2б. Включаем макбук зажав Opt. В качестве загрузочного выбираем «старый» диск подключенный через USB.
3. После загрузки макбука открываем терминал.
Смотрим текущую конфигурация дисков
[root@ibook /]# diskutil list
/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *60.0 GB disk0
1: EFI 209.7 MB disk0s1
2: Apple_HFS Untitled 59.7 GB disk0s2
3: Apple_Boot Boot OS X 134.2 MB disk0s3
/dev/disk1
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *250.1 GB disk1
1: EFI 209.7 MB disk1s1
2: Apple_HFS Untitled 1 249.7 GB disk1s2
3: Apple_Boot Boot OS X 134.2 MB disk1s3
…
Запоминаем и записываем соответствие имен реальным дискам.
В моем случае disk0 это новый SSD 60Gb, disk1 большой HDD 250Gb. Мои диски уже были сконфигурированы с разделами GUID и на них были созданы разделы HFS. Если ваши диски пустые, то необходимо открыть дисковую утилиту и очистить нужные диски создав на них таблицу GUID и один большой раздел HFS.
4. На поверку яблочный Fusion Drive оказывается аналогом Logical Volume Manager (LVM). В Mac OS X реализован подсистемой CoreStorage. Все манипуляции выполняются консольной дисковой утилитой diskutil с параметром corestorage или просто cs.
4.1. Создаем новую группу томов указав имя группы и имена физических дисков SSD и HDD в правильном порядке
[root@ibook /]# diskutil cs create iBookLVG disk0 disk1
Started CoreStorage operation
Unmounting disk0
Repartitioning disk0
Unmounting disk
Creating the partition map
Rediscovering disk0
Adding disk0s2 to Logical Volume Group
Unmounting disk1
Repartitioning disk1
Unmounting disk
Creating the partition map
Rediscovering disk1
Adding disk1s2 to Logical Volume Group
Creating Core Storage Logical Volume Group
Switching disk0s2 to Core Storage
Switching disk1s2 to Core Storage
Waiting for Logical Volume Group to appear
Discovered new Logical Volume Group "83AD8C5F-5883-4110-89D7-6097BA33AFBB"
Core Storage LVG UUID: 83AD8C5F-5883-4110-89D7-6097BA33AFBB
Finished CoreStorage operation
Проверяем, что получилось
[root@ibook /]# diskutil cs list
CoreStorage logical volume groups (1 found)
|
+-- Logical Volume Group 83AD8C5F-5883-4110-89D7-6097BA33AFBB
=========================================================
Name: iBookLVG
Size: 309393883136 B (309.4 GB)
Free Space: 122880 B (122.9 KB)
|
+-< Physical Volume 8CEC5A9F-DB16-4C85-897E-700B69BC0D4C
| ----------------------------------------------------
| Index: 0
| Disk: disk0s2
| Status: Online
| Size: 59678507008 B (59.7 GB)
|
+-< Physical Volume 8F1CE39C-425D-411B-B481-62E601F237C8
----------------------------------------------------
Index: 1
Disk: disk1s2
Status: Online
Size: 249715376128 B (249.7 GB)
4.2. Создаем логический том в группе томов 83AD8C5F-5883-4110-89D7-6097BA33AFBB, составляющий 100% размера группы.
[root@ibook /]# diskutil cs createVolume 83AD8C5F-5883-4110-89D7-6097BA33AFBB jhfs+ LV 100%
Started CoreStorage operation
Waiting for Logical Volume to appear
Formatting file system for Logical Volume
Initialized /dev/rdisk3 as a 307 GB HFS Plus volume with a 32768k journal
Mounting disk
Core Storage LV UUID: CB7195D6-582C-449D-8303-43961C1C55FE
Core Storage disk: disk3
Finished CoreStorage operation
Результат:
[root@ibook /]# diskutil cs list
CoreStorage logical volume groups (1 found)
|
+-- Logical Volume Group 83AD8C5F-5883-4110-89D7-6097BA33AFBB
=========================================================
Name: iBookLVG
Size: 309393883136 B (309.4 GB)
Free Space: 122880 B (122.9 KB)
|
+-< Physical Volume 8CEC5A9F-DB16-4C85-897E-700B69BC0D4C
| ----------------------------------------------------
| Index: 0
| Disk: disk0s2
| Status: Online
| Size: 59678507008 B (59.7 GB)
|
+-< Physical Volume 8F1CE39C-425D-411B-B481-62E601F237C8
| ----------------------------------------------------
| Index: 1
| Disk: disk1s2
| Status: Online
| Size: 249715376128 B (249.7 GB)
|
+-> Logical Volume Family C2CF1DC7-8EE8-4AE2-8E2F-4F2B9C7DF7EE
----------------------------------------------------------
Encryption Status: Unlocked
Encryption Type: None
Conversion Status: NoConversion
Conversion Direction: -none-
Has Encrypted Extents: No
Fully Secure: No
Passphrase Required: No
|
+-> Logical Volume CB7195D6-582C-449D-8303-43961C1C55FE
---------------------------------------------------
Disk: disk2
Status: Online
Size (Total): 307354009600 B (307.4 GB)
Size (Converted): -none-
Revertible: No
LV Name: LV
Volume Name: LV
Content Hint: Apple_HFS
В системе появился новый дисковый раздел Fusion Drive — disk2
[root@ibook /]# diskutil list
/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *60.0 GB disk0
1: EFI 209.7 MB disk0s1
2: Apple_CoreStorage 59.7 GB disk0s2
3: Apple_Boot Boot OS X 134.2 MB disk0s3
/dev/disk1
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *250.1 GB disk1
1: EFI 209.7 MB disk1s1
2: Apple_CoreStorage 249.7 GB disk1s2
3: Apple_Boot Boot OS X 134.2 MB disk1s3
/dev/disk2
#: TYPE NAME SIZE IDENTIFIER
0: Apple_HFS LV *307.4 GB disk2
Закрываем терминал.
5а. Восстанавливаем систему из Time Machine на созданный раздел Fusion Drive.
5б. Запускаем Carbon Copy Cloner и клонируем систему со «старого» SSD на раздел Fusion Drive.
Перезагружаемся.
6. После загрузки с Fusion Drive я отключил обновление времени доступа к файлам для корневого раздела HFS и еще раз перезагрузился.
[root@ibook /]# cat > /Library/LaunchDaemons/com.noatime.root.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.noatime.root</string>
<key>ProgramArguments</key>
<array>
<string>mount</string>
<string>-uwo</string>
<string>noatime</string>
<string>/</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
В итоге дисковая система выглядит так
[root@ibook /]# df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk2 286Gi 34Gi 252Gi 12% 9001947 66035651 12% /
…
[root@ibook /]# mount
/dev/disk2 on / (hfs, local, journaled, noatime)
…
7. Копируем данные с временного диска обратно на макбук.
В процессе копирования контролируем активность отдельных дисков составляющих Fusion Drive
[root@ibook /]# iostat 1
disk0 disk1 disk3 cpu load average
KB/t tps MB/s KB/t tps MB/s KB/t tps MB/s us sy id 1m 5m 15m
207.34 170 34.34 0.00 0 0.00 126.16 277 34.17 13 14 73 1.24 1.11 0.86
260.84 167 42.45 0.00 0 0.00 125.78 280 34.44 9 17 74 1.24 1.11 0.86
251.41 148 36.27 0.00 0 0.00 125.91 280 34.49 12 16 73 1.24 1.11 0.86
...
Когда место на SSD (disk0) закончится данные станут записываться уже на HDD (disk1), что отразится в соответствующей колонке.
280.52 122 33.37 0.00 0 0.00 123.84 278 33.57 19 16 64 1.65 1.24 0.93
205.77 179 35.91 0.00 0 0.00 126.11 283 34.79 20 18 61 1.65 1.24 0.93
274.48 132 35.32 0.00 0 0.00 123.96 288 34.80 16 15 69 1.68 1.25 0.93
264.53 106 27.33 442.67 3 1.29 125.38 211 25.79 9 15 76 1.68 1.25 0.93<-------------------
7.20 10 0.07 313.53 102 31.16 125.87 218 26.74 13 15 72 1.68 1.25 0.93
5.17 216 1.09 243.64 145 34.44 126.06 276 33.92 15 20 65 1.80 1.29 0.95
5.01 127 0.62 221.40 171 36.91 126.49 279 34.41 14 17 69 1.74 1.29 0.95
Проверяем, работает ли миграция файлов c HDD на SSD
Методика проверки выбрана простая — с помощью dd считываем один и тот же большой файл несколько раз при этом наблюдая за активностью дисков. Для теста я выбрал 2Гбайтный файл образа виртуальной машины, который был записан на HDD диск нового хранилища уже после заполнения SSD.
Считывание #1
[root@ibook Elsa.vmwarevm]# dd if=Elsa-s007.vmdk of=/dev/null bs=100m
18+1 records in
18+1 records out
1987051520 bytes transferred in 31.128078 secs (63834700 bytes/sec)
В другой консоли наблюдаем за нагрузкой с помощью iostat:
disk0 disk1 cpu load average
KB/t tps MB/s KB/t tps MB/s us sy id 1m 5m 15m
0.00 0 0.00 0.00 0 0.00 4 3 93 10.39 5.95 3.32
6.86 7 0.05 0.00 0 0.00 4 4 91 9.55 5.85 3.30
76.80 5 0.37 496.30 106 51.25 4 12 85 9.55 5.85 3.30 <--------
56.80 10 0.55 481.88 102 47.88 12 10 79 9.55 5.85 3.30
64.00 2 0.12 504.07 113 55.54 7 10 84 9.55 5.85 3.30
52.50 8 0.41 494.75 141 67.96 13 11 76 8.79 5.76 3.28
44.00 3 0.13 503.47 135 66.27 4 10 86 8.79 5.76 3.28
Видно, что данные считываются с HDD (disk1), а SSD немного нагружается видимо системой.
Считывание #2
[root@ibook Elsa.vmwarevm]# dd if=Elsa-s007.vmdk of=/dev/null bs=100m
18+1 records in
18+1 records out
1987051520 bytes transferred in 39.535700 secs (50259677 bytes/sec)
В другой консоли iostat:
107.11 18 1.88 448.52 123 53.75 4 11 86 3.45 4.78 3.10
54.74 35 1.87 445.15 108 46.87 4 11 85 3.45 4.78 3.10
124.00 93 11.24 288.20 159 44.68 5 11 84 3.45 4.78 3.10
118.05 325 37.52 128.00 298 37.31 4 12 84 3.45 4.78 3.10 <--------
67.48 547 36.05 128.00 261 32.63 21 14 64 3.49 4.76 3.10
84.42 430 35.47 128.81 278 34.91 15 16 69 3.49 4.76 3.10
127.01 370 45.84 128.00 367 45.82 5 13 81 3.49 4.76 3.10
119.30 344 40.13 128.00 318 39.81 2 12 86 3.49 4.76 3.10
Обращаем внимание на несколько возросшее время считывания и на сохраняющуюся нагрузку на HDD по завершении процесса dd. Очевидно, система переносит наш файл на SSD, стараясь сделать этот процесс более незаметным с помощью ограничения скорости обмена данными.
Наблюдаем окончание процесса переноса:
124.39 439 53.38 128.00 426 53.31 46 23 31 2.48 3.97 2.95
92.67 385 34.84 127.57 271 33.78 52 16 32 2.48 3.97 2.95
126.04 422 51.89 128.00 416 51.95 65 22 13 2.92 4.04 2.98
83.21 177 14.37 128.00 111 13.89 25 10 65 2.92 4.04 2.98
4.40 10 0.04 0.00 0 0.00 18 10 72 2.92 4.04 2.98 <---------
4.44 18 0.08 0.00 0 0.00 13 11 77 2.92 4.04 2.98
6.29 7 0.04 0.00 0 0.00 16 10 74 2.92 4.04 2.98
Считывание #3
[root@ibook Elsa.vmwarevm]# dd if=Elsa-s007.vmdk of=/dev/null bs=100m
18+1 records in
18+1 records out
1987051520 bytes transferred in 8.074579 secs (246087322 bytes/sec)
iostat:
9.50 16 0.15 0.00 0 0.00 18 10 72 2.55 3.92 2.95
4.00 1 0.00 0.00 0 0.00 9 4 87 2.55 3.92 2.95
238.63 308 71.89 0.00 0 0.00 6 16 78 2.55 3.92 2.95
464.47 506 229.70 0.00 0 0.00 4 22 74 2.55 3.92 2.95
462.12 532 240.12 0.00 0 0.00 4 21 75 2.55 3.92 2.95
430.49 545 229.11 0.00 0 0.00 6 22 72 2.43 3.87 2.94
Задействован только SSD диск, а время считывания уменьшилось в несколько раз.
Опыт, описанный в сети другими пользователями, так же подтверждает работу этого функционала.
С большой долей вероятности процедуру можно успешно выполнить на компьютерах Apple предыдущих версий и в других формфакторах. У меня на очереди рабочий Mac Mini.
Спасибо за внимание.
Использованные источники
Fusion drive on older Macs? YES!
Undocumented CoreStorage Commands
PS.
- Объединение дисков в группу логических томов повышает риск потери всех данных при разрушении LVM. Обязательно настройте резервное копирование Time Machine.
- Существует возможность преобразования диска в том LVM и обратно без форматирования и без потери данных. Однако недокументированная возможность добавления к тому второго диска к сожалению не работает, что не позволяет сделать переход на Fusion Drive еще более простым и быстрым. Необходимо заранее решить сколько дисков будет использоваться в группе, т.к. пока изменять их количество на лету не представляется возможным. Будем ждать расширения функционала от Apple.
UPDATE
Дождались! В Mac OS X Mavericks функционал расширен. Подробности тут.