Воткнул в Mac внешний диск от коллеги - а он только для чтения. Скопировал фотки на флешку для камеры - камера флешку не видит. Подключил NAS через Finder - половина файлов не удаляется, права кривые, и поверх всего этого Mac рассыпал по чужому серверу гирлянду из .DS_Store. Всё это - один и тот же класс проблем: ты не понимаешь, какой под капотом формат и какой протокол.
Этот урок - про то, как Mac на самом деле видит хранилище. Локальный внешний диск (USB, Thunderbolt) - это блочное устройство с файловой системой, которую надо уметь читать и писать. Сетевой том (SMB, NFS, WebDAV) - это вообще не файловая система на диске, а протокол поверх сокета, со своей моделью прав. Разберём механику обоих, научимся монтировать руками из терминала, выберем правильный формат под задачу и обойдём грабли с правами и мусорными файлами. Темы пересекаются с тем, что Mac-админ парка делает каждый день: внешний диск mac, exfat mac, ntfs mac, smb mac, сетевой диск mac.

Локальные диски: от устройства до /Volumes
Когда ты втыкаешь USB- или Thunderbolt-накопитель, ядро регистрирует блочное устройство в /dev. Подсистема diskarbitrationd (Disk Arbitration) видит новый диск, читает таблицу разделов и метаданные файловых систем, и если знает формат - автоматически монтирует тома в /Volumes. Папка с именем тома там появляется сама. Это автомонтирование, и работает оно не через fstab, а через демон.
Посмотрим, что Mac видит, до всякого Finder:
Код: Выделить всё
diskutil list
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk0
1: EFI EFI 314.6 MB disk0s1
2: Apple_APFS Container disk3 1.0 TB disk0s2
/dev/disk4 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *64.0 GB disk4
1: Microsoft Basic Data UNTITLED 64.0 GB disk4s1
Детали по конкретному тому:
Код: Выделить всё
diskutil info /dev/disk4s1
Volume Name: UNTITLED
File System Personality: NTFS
Type (Bundle): ntfs
Mount Point: /Volumes/UNTITLED
Read-Only Volume: Yes
Read-Only Media: No
Если диск не примонтировался сам (бывает на внешних HFS под Tahoe 26.4 как известный баг), монтируешь руками:
Код: Выделить всё
diskutil mount /dev/disk4s1
Volume UNTITLED on /dev/disk4s1 mounted
diskutil unmount /dev/disk4s1
diskutil unmountDisk /dev/disk4
Форматы: что под какую задачу
Формат - это не вкусовщина, это совместимость и фичи. Коротко по делу.
- APFS (Apple File System) - родной формат Mac начиная с High Sierra. Снапшоты, клоны, шифрование, копирование без дублирования данных. Идеален для дисков, которые живут только на Mac, и для загрузочных/Time Machine-дисков на SSD. Минус: Windows его без сторонних драйверов не читает вообще.
- Mac OS Extended (HFS+, журналируемый) - предшественник APFS. Сегодня нужен в основном для Time Machine на вращающихся HDD (Apple до сих пор предпочитает HFS+ для механики) и для совместимости со старыми Mac.
- exFAT - кросс-платформенный формат без журнала. Mac и Windows читают и пишут нативно, понимают камеры, приставки, телевизоры. Нет лимита FAT32 на 4 ГБ один файл. Это правильный выбор для обмена: exfat mac - то, что ты ставишь на флешку и диск, который должен жить и тут, и там. Минус: нет журнала, поэтому при выдёргивании на запись легко получить повреждение. Всегда unmount перед извлечением.
- MS-DOS (FAT32) - максимальная совместимость со старьём, но потолок файла 4 ГБ и тома около 2 ТБ. Для одного видео уже мало. Бери только если устройство не понимает exFAT.
- NTFS - формат Windows. Mac читает его из коробки, но не пишет без сторонних драйверов (Paragon NTFS for Mac, Microsoft NTFS by Tuxera и подобные, ставятся через Homebrew cask или вручную). Поэтому диск друга с Windows у тебя только для чтения. Лечится либо драйвером, либо переформатированием в exFAT - если данные можно перенести.
Код: Выделить всё
# exFAT для обмена с Windows и камерами, имя тома SHUTTLE
diskutil eraseDisk ExFAT SHUTTLE /dev/disk4
# APFS только для Mac
diskutil eraseDisk APFS MacWork /dev/disk4
# Mac OS Extended журналируемый (HFS+) под имя BACKUP
diskutil eraseDisk JHFS+ BACKUP /dev/disk4
Сетевые тома: SMB, NFS, WebDAV и легаси AFP
Сетевой том - принципиально другая зверюга. Тут нет файловой системы на твоём диске. Есть протокол, который гоняет файловые операции по сети на чужой сервер. Mac поддерживает SMB (основной), NFS, WebDAV, плюс легаси AFP и FTP (только чтение).
SMB (smb mac) - дефолт сегодня. На нём работают Windows-шары, Samba на Linux, почти все NAS (Synology, QNAP). Apple много лет назад заменила им свой AFP. Самый простой путь - Finder: жмёшь Cmd+K (меню Переход -> Подключение к серверу), вводишь адрес и логин:
Код: Выделить всё
smb://nas.local/media
smb://192.168.1.50/backup
afp://oldserver.local/share # AFP - только если сервер реально старый
nfs://fileserver/export/data
https://dav.example.com/files # WebDAV поверх HTTPS
Теперь руками из терминала - то, что нужно админу для скриптов и автоматизации. Монтировать SMB лучше через mount_smbfs (это псевдоним mount -t smbfs). Сперва создай точку монтирования - без существующей папки получишь ошибку could not find mount point:
Код: Выделить всё
mkdir -p ~/mnt/nas
mount_smbfs //ivan@nas.local/media ~/mnt/nas
# спросит пароль интерактивно
# то же через универсальный mount
mount -t smbfs //ivan@nas.local/media ~/mnt/nas
# гость без пароля, не дёргать промпт
mount_smbfs -N //guest:@nas.local/public ~/mnt/pub
Код: Выделить всё
mount_smbfs [-N] //[домен;][пользователь[:пароль]@]сервер/шара точка_монтированияКод: Выделить всё
umount ~/mnt/nas
# или
diskutil unmount ~/mnt/nas
Код: Выделить всё
sudo mount -t nfs -o resvport,rw fileserver:/export/data ~/mnt/nfs
Права на сетевых томах и проклятие .DS_Store
Самая частая засада с сетевым диском mac - права. Логика тут не локальная. На SMB-шаре действуют права сервера: твой uid на Mac (скажем, 501) сервер мапит на свою учётку по логину, под которым ты подключился. Поэтому ls -l на смонтированной шаре может показывать чужого владельца или вообще странные uid - это нормально, владение определяет сервер, а не твой Mac.
Код: Выделить всё
ls -le /Volumes/media
drwxr-xr-x 1 ivan staff ... Documents
-rw-r--r-- 1 ivan staff ... report.pdf
И отдельная боль - .DS_Store. Finder в каждой папке, куда заглядывает, создаёт скрытый файл .DS_Store с настройками вида (сортировка, позиции иконок). На своём Mac это безобидно, но на общей сетевой шаре Mac засеивает этими файлами весь чужой сервер, бесит Windows-коллег и захламляет NAS. Отключается одной настройкой - запретить запись .DS_Store на сетевые тома:
Код: Выделить всё
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
# применится к новым подключениям; перелогинься или перемонтируй шару
Код: Выделить всё
dot_clean /Volumes/SHUTTLE
Хочешь, чтобы сетевая шара цеплялась сама. Способов несколько, у каждого свой профиль применимости.
- Элементы входа (Системные настройки -> Основные -> Объекты входа) или просто галка в Finder - примитивно, но для одного пользователя на одной машине работает. Шара открывается при логине.
- autofs - правильный механизм для админа. Демон automountd монтирует шару по требованию, в момент первого обращения к каталогу, и отцепляет по таймауту простоя. Конфиг - /etc/auto_master, который ссылается на map-файлы. Минус, который надо знать заранее: autofs - инструмент для продвинутых, и крупные обновления macOS любят откатывать правки в системных конфигах, так что после апгрейда проверяй.
- /etc/fstab на Mac - есть, но используется редко и не так, как в Linux. На современной macOS его чаще трогают, чтобы запретить автомонтирование конкретного тома по UUID, а не чтобы монтировать сетевое.
Код: Выделить всё
# /etc/auto_master
/- auto_smb
Код: Выделить всё
# /etc/auto_smb
/Users/ivan/mnt/nas -fstype=smbfs ://ivan:pass@nas.local/media
Код: Выделить всё
sudo automount -vc
Типичные грабли
- Диск только для чтения = NTFS. Прежде чем гуглить починку, сделай diskutil info и глянь File System Personality. NTFS - значит нужен драйвер или переформат в exFAT. Не существует штатного способа писать на NTFS из коробки.
- exFAT и резкое извлечение. Нет журнала - выдернул на записи, получил битую таблицу. Всегда diskutil unmountDisk или Извлечь в Finder перед тем как тянуть кабель.
- Стёр не тот диск. eraseDisk не спрашивает Are you sure после ввода. Сверяй идентификатор по diskutil list, ориентируйся на размер и метку external.
- .DS_Store на чужом NAS. Поставь DSDontWriteNetworkStores один раз на всех Mac в парке через MDM-профиль - и забудь про жалобы.
- NFS: Operation not permitted. Добавь -o resvport. Сервер требует привилегированный порт.
- could not find mount point. Точку монтирования для mount_smbfs надо создать заранее: mkdir -p.
- Права на шаре не меняются через chmod. Это не баг Mac. Доступ рулит сервер - правь ACL на NAS.
Возьми любую флешку, которую не жалко (данные сотрутся), и опционально доступ к NAS или к расшаренной папке на другом компьютере.
- Воткни флешку. Выполни diskutil list, найди её по размеру и метке external, запиши идентификатор (например /dev/disk4).
- Проверь текущий формат: diskutil info /dev/disk4s1. Найди строки File System Personality и Read-Only Volume.
- Отформатируй в exFAT: diskutil eraseDisk ExFAT LABTEST /dev/disk4. Перечитай diskutil list - убедись, что формат сменился и том примонтировался в /Volumes/LABTEST.
- Создай файл, скопируй на флешку, потом dot_clean /Volumes/LABTEST и посмотри ls -a - есть ли ._-файлы.
- Безопасно отцепи: diskutil unmountDisk /dev/disk4.
- Если есть SMB-шара: mkdir -p ~/mnt/lab, затем mount_smbfs //логин@сервер/шара ~/mnt/lab, введи пароль. Проверь ls -le ~/mnt/lab, отметь владельца. Отмонтируй umount ~/mnt/lab.
- Включи защиту от мусора на сетевых: defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true.
- Внешний диск примонтировался только для чтения. Какой командой выяснить причину за десять секунд и что ты ожидаешь там увидеть?
- Тебе нужно гонять файлы по 8 ГБ между Mac и Windows на одной флешке. Какой формат выберешь и почему не FAT32 и не NTFS?
- Чем отличается diskutil unmount от diskutil unmountDisk и какую из них делать перед извлечением диска?
- Почему chmod на файле внутри SMB-шары часто ничего не меняет и где на самом деле чинить права?
Локальный диск - это формат на блочном устройстве: смотришь его через diskutil info, монтируешь diskutil mount, выбираешь формат под задачу (APFS - только Mac, exFAT - обмен, NTFS - чужой и только для чтения без драйвера). Сетевой том - это протокол: SMB по умолчанию, монтируешь через Cmd+K или mount_smbfs, права живут на сервере, а Finder норовит насорить .DS_Store - что лечится одним defaults write. Держи в голове разницу между этими двумя мирами, и хранилище на Mac перестанет преподносить сюрпризы.