Создайте RAM-диск APFS на macOS High Sierra
обычно создание RAM-дисков работает со следующими командами
hdid -nomount ram://<blocksize>
Возвращает, например. /DEV/disk 2
Затем я отформатировал диск, скажем
newfs_hfs /dev/disk2
а затем установите его:
mount -t hfs /dev/disk2 /some/mount/target
Эта процедура не работает с APFS. Я нахожусь в High Sierra beta 9. Команда mount не выводит никаких ошибок, но путь не монтируется.
В моем случае, после завершения команды hdid
, newfs_apfs -i /dev/disk2
дает
nx_kernel_mount:1364: checkpoint search: largest xid 1, best xid 1 @ 1
nx_kernel_mount:1422: sanity checking all nx state... please be patient.
spaceman_metazone_init:278: no metazone for device 0, of size 209715200 bytes, block_size 4096
apfs_newfs:18075: FS will NOT be encrypted.
Когда я вхожу в mount -t apfs /dev/disk2 /some/target/path
, тогда команды монтирования работают в течение 2 секунд, не дают никакого выхода, и mount не был успешным.
Может ли кто-нибудь сказать мне, как на самом деле сделать RAM-диск APFS s.t. оно работает?: Р
PS: Я также пробовал что-то вроде diskutil partitionDisk /dev/disk2 GPT APFS myvolumename 0b
, которое монтирует том в /Volumes/myvolumename
, но создает еще один диск (disk3
в этом случае), который кажется мне странным!
Ответы
Ответ 1
Найдено решение:
hdid -nomount ram://<blocksize>
diskutil erasedisk <format> <diskname> <output path of previous hdid command>
где <format>
берется из diskutil listFilesystems
из столбца "Личность". Да, мне кажется странным, что вам, возможно, придется процитировать этот параметр, например. при указании вариантов, чувствительных к регистру, но хорошо...
<blocksize>
составляет 2048 * desired size in megabytes
Последняя команда форматирует RAM-диск и монтирует его на /Volumes/<diskname>
Кажется, что при входе diskutil list
вы увидите два новых диска, один hdid
и синтезированный.
Чтобы уничтожить RAM-диск снова, вызовите diskutil eject <output path of previous hdid command>
, например. diskutil eject /dev/disk2
Это сделает всю работу за вас, размонтирует путь /Volumes/<diskname>
и уничтожит два диска, освободив вашу память.
Имейте в виду, что минимальные/максимальные значения для <blocksize>
зависят от выбранного <format>
. Кроме того, <diskname>
не всегда выбирается произвольно. Пример: FAT32 требует, чтобы он состоял из прописных букв!
Ура!
Ответ 2
@Glyph предоставил лучший ответ в комментарии к принятому ответу, но он заслуживает собственного ответа:
diskutil partitionDisk $(hdiutil attach -nomount ram://2048000) 1 GPTFormat APFS 'ramdisk' '100%'
Я обновил Glyph-ответ, чтобы немного упростить название тома.
Ответ 3
Кроме того, информация для удаления/уничтожения RAM-диска должна быть исправлена. ramdisk будет создан в пути /Volumes/'ramdisk', поэтому команда выглядит так:
diskutil eject /Volumes/'ramdisk'