Вопрос или проблема
Я использую Mac mini с Ubuntu 22.04.5 LTS. Я использую его как файловый сервер. На нем работает samba и почти ничего больше. У него есть 1 ТБ.
1 ТБ всегда было более чем достаточно для меня — я никогда не использую больше 600 ГБ. Однако недавно мне потребовалось больше места. Я взял старый внешний жесткий диск на 5 ТБ и подключил его к Mac mini, затем выполнил sudo mount /dev/sda2 /samba/$myfolder/ext_hd
Так что теперь в моей папке samba есть папка ext_hd, которая хранится на внешнем, большом жестком диске. Я продолжал перемещать туда файлы большого размера, это отлично работает.
Но вчера я получил огромный 7zip от коллеги. Он весит около 700 ГБ и содержит массу данных. У меня он находится на моем Windows ПК, но я также хотел бы сохранить его на моем файловом сервере, чтобы быть уверенным.
Но хотя на моем внешнем жестком диске еще доступно 4,4 ТБ, я не могу его сохранить. Потому что samba смотрит только на изначально доступное свободное пространство на внутреннем жестком диске, подключенном к Windows ПК через samba (в настоящее время на нем осталось только около 500 ГБ).
Что я могу сделать, чтобы решить эту проблему? Буду очень благодарен любому совету. Есть ли способ сказать samba, чтобы она учитывала смонтированное дополнительное пространство?
.
Ответ или решение
Конечно, давайте рассмотрим вашу проблему более подробно и попробуем предложить подходящее решение для вашей ситуации с использованием Samba на сервере Ubuntu.
Теория
Samba — это программный пакет, который позволяет обеспечить совместимость сетевых протоколов Windows и Unix/Linux. Он предоставляет возможность ПК с Windows подключаться и использовать файловые ресурсы на серверах Linux, как в вашем случае. Одна из потенциальных проблем, с которой вы столкнулись, заключается в том, как Samba управляет дисковым пространством при монтировании различных дисков.
Проблема с доступным пространством на Samba может проистекать из нескольких факторов, наиболее вероятный из которых — это то, как Samba отображает доступное пространство для клиентов Windows. Обычно, когда вы монтируете дополнительный диск, Samba может не обновлять информацию о доступном пространстве, поскольку она по умолчанию берет данные о размере и доступном пространстве из файловой системы, на которой изначально был настроен общий доступ.
Пример
В вашем случае, вы подключили дополнительный внешний жесткий диск объемом 5 ТБ и смонтировали его в определенную папку на вашем исходном диске, в пространстве, которое вы делитесь с Windows через Samba. Хотя у вас реально стало доступно дополнительно 5 ТБ, Samba может отображать свободное пространство только для исходного внутреннего диска. В результате, когда вы пытаетесь копировать большой файл объёмом 700 ГБ, клиент Windows продолжает считать, что свободно только 500 ГБ.
Применение
Чтобы решить эту проблему, следует рассмотреть несколько подходов.
Обновление конфигурации Samba
-
Параметр
dfree command
: В конфигурационном файле Samba (/etc/samba/smb.conf
) можно указать специальную команду, которая заставляет Samba рассчитывать свободное пространство не по дефолтной логике, а через выполнение пользовательской команды.Например, вы можете добавить следующий блок в ваш конфигурационный файл:
[global] dfree command = /usr/local/bin/dfree.sh
Здесь
dfree.sh
— это ваш пользовательский скрипт, который вернёт нужные значения свободного и занятого пространства из всех подключенных томов. -
Создание скрипта
dfree.sh
: Создайте скрипт, который будет выполнять командуdf
для подсчета свободного места и возвращать минимум:#!/bin/bash df -P | awk 'BEGIN {FS=" "} NR>1{print $4, $3}' | awk '{total+=$2; used+=$1} END {print used " " total}'
Убедитесь, что файл исполняемый:
chmod +x /usr/local/bin/dfree.sh
-
Перезагрузка Samba: После изменения конфигурации, перезапустите службу Samba:
sudo systemctl restart smbd
Проверка разрешений и путей
Убедитесь, что права доступа и владельцы каталогов установлены корректно, чтобы у Samba были все необходимые права для доступа и отображения свободного места на смонтированных дисках.
chown -R $USER:$GROUP /samba/$myfolder
chmod -R 755 /samba/$myfolder
Альтернативный подход: отдельная шаринг-конфигурация
Рассмотрите возможность выделения отдельного общего доступа в Samba для внешнего диска, чтобы повысить прозрачность процессов:
-
Отдельный раздел: В разделе
[global]
добавьте новый сервис:[external] path = /samba/$myfolder/ext_hd browseable = yes writable = yes guest ok = no valid users = your_username
-
Настроить доступ: Обновите свой конфигурационный файл, перезапустите службу и перепроверьте соединение с клиентским ПК.
Таким образом, вы сможете реализовать более гибкое и эффективное управление дисковым пространством через Samba, что позволит вашему серверу корректно показывать клиентам реальное доступное пространство, находящееся как на внутреннем, так и на внешнем дисках.