I have read about limiting size of directory — like creating big files, formatting,mount,.. etc.
But this all very complicated. Does exist utility or something else to set limit on already existing directory?
asked Nov 16, 2011 at 8:32
user710818user710818
22.8k57 gold badges147 silver badges205 bronze badges
3
Quota is based upon filesystems, but you can always create a virtual filesystem and mount it on a specific (empty) directory with the usrquota and/or grpquota flags.
In steps this will be:
- create the mount point
- create a file full of /dev/zero, large enough to the maximum size you want to reserve for the virtual filesystem
- format this file with an ext3 filesystem (you can format a disk space even if it is not a block device, but double check the syntax of every — dangerous — formatting command)
- mount the newly formatted disk space in the directory you’ve created as mount point, e.g.
Code:
mount -o loop,rw,usrquota,grpquota /path/to/the/formatted/disk/space /path/of/mount/point
- Set proper permissions
- Set quotas
and the trick is done.
Tutorial here.
Original answer here
Tarka
4,0022 gold badges23 silver badges33 bronze badges
answered Nov 16, 2011 at 8:44
0
You could limit the quota on a filesystem. But it is not directory specific, but file system & user specific.
You might also consider developping your own user space file system using FUSE, but this will take your time.
answered Nov 16, 2011 at 8:35
Чаще всего задача расширить файловую систему возникает при работе с облачной инфраструктурой. Виртуализация позволяет экономить на дисковом пространстве и выделять его столько, сколько необходимо в конкретный момент. Но простого расширения ресурсов недостаточно, об изменениях необходимо сообщить операционной системе. Сегодня ведущий архитектор #CloudMTS Дмитрий Фисенко в формате пошагового туториала расскажет, как это сделать.
Материал будет интересен начинающим системным администраторам, а также разработчикам, которые хотят ближе познакомиться с файловыми системами.
Подготовительная работа
Мы рассмотрим сценарии с двумя вариантами разметки диска — с использованием LVM и логических разделов, а также без них. Поскольку мы будем работать в облачной среде, где важны доступность и непрерывность сервисов, сфокусируемся на подходах, позволяющих расширить файловую систему без перезагрузки виртуальной машины (хотя сделать это не всегда возможно).
В рамках руководства нам также потребуется утилита growpart. К сожалению, нельзя просто так взять и расширить смонтированную файловую систему. Стандартные утилиты вроде fdisk или GParted предлагают предварительно размонтировать раздел. Вот команды установки growpart для различных семейств Linux-систем:
apt-get install cloud-utils-growpart
yum install cloud-utils-growpart
dnf install cloud-utils-growpart
Также рекомендуем сформировать на виртуальной машине точку восстановления (snapshot) на случай, если что-то пойдет не по плану.
Когда нет LVM
Рассмотрим задачу, когда на диске присутствует два раздела — загрузочный и корневой. Они смонтированы в произвольную точку. Вот как это выглядит в графическом интерфейсе GParted:
Расширять будем корневой раздел. Первым делом необходимо увеличить доступный объем жесткого диска через панель управления облачной инфраструктурой #CloudMTS — с 7 до 8 Гбайт.
Увеличение диска займет какое-то время, а мы вернемся на тестовый стенд. Отобразим структуру разделов с помощью команды:
parted /dev/sdb/ print free
Параметры print
и free
отвечают за отображение структуры разделов и неразмеченного пространства.
Мы увеличили объем диска, но все равно не видим в выдаче команды parted
свободную память. Можно перезагрузить сервер, но мы решили, что по возможности не будем останавливать виртуальную машину. Вместо этого, выполним команду:
echo 1 > /sys/block/sdb/device/rescan
Если мы попытаемся снова отобразить структуру разделов командой parted
, то увидим предупреждение. Мы используем таблицу разделов в формате GPT. Информация о ней хранится в начале и в конце диска (для резервирования). Когда мы увеличили объем физического накопителя, сменился конец адресного пространства. Система предлагает автоматически переместить резервные файлы. Соглашаемся и пишем в командной строке fix.
Появилось свободное дисковое пространство в размере одного гигабайта:
Прежде чем перейти к расширению файловой системы, необходимо разметить новое пространство и расширить сам раздел. Здесь нам пригодится утилита growpart — выполним команду:
growpart /dev/sdb 2
Мы расширили раздел, но файловая система осталась нетронутой. Вот как это выглядит в GParted:
Давайте расширим ФС командой resize2fs
. Если у вас xfs, то нужно указывать точку монтирования. В случае с ext2, ext3 и ext4 достаточно выполнить команду с указанием блочного устройства, которое монтируется в файловую систему. Мы используем ext4, поэтому выполним:
resize2fs /dev/sdb2
Таким образом, мы успешно расширили файловую систему до размера диска.
Теперь рассмотрим другую ситуацию, когда ФС находится в логическом диске, созданном в расширенном разделе. Так структура выглядит в древовидном формате:
У нас два основных раздела — sdc1 и sdc2. Второй — расширенный, и внутри него можно сформировать неограниченное количество новых разделов. Перейдем в облачную панель управления и увеличим диск на один гигабайт, а затем обновим информацию об устройстве sdc уже известной командой:
echo 1 > /sys/block/sdс/device/rescan
Конкретно этот диск мы разметили в формате MBR, поэтому здесь мы не видим предупреждений о переносе резервной копии таблицы разделов, как в случае с GPT.
Вернемся в консоль и отобразим информацию о диске:
parted /dev/sdb/ print free
Чтобы не захламлять выдачу, временно уберем отображение свободного пространства на диске:
parted /dev/sdb/ print
У нас есть три раздела: основной под номером один, расширенный и логический под номерами два и пять.
Чтобы понять, какие разделы находятся в extended, необходимо сверить их начало и конец. Здесь мы видим, что конец второго раздела соответствует концу пятого раздела — 5369 Мбайт. И размер последнего на один мегабайт меньше. Так мы можем утверждать, что пятый раздел находится во втором разделе.
Чтобы расширить пятый раздел, необходимо предварительно увеличить второй. Для этого выполним:
growpart /dev/sdc 2
Вот так результат команды будет выглядеть в графическом отображении:
Раздел extended был расширен до конца всего раздела — вокруг неразмеченной области появилась голубая рамка. Теперь расширим пятый раздел, который пока занимает 4,5 Гб из доступных 5,5 Гб. В консоли пишем:
growpart /dev/sdc 5
Теперь и желтая рамка, обозначающая пятый раздел, протянулась до конца физического диска. Но мы видим, что файловая система все еще заканчивается сильно раньше. В нашем примере мы используем файловую систему xfs, которая наиболее распространена на CentOS, хотя иногда её применяют и на Debian с Ubuntu.
Для расширения файловой системы выполним команду:
xfs_growfs /mnt/sdc5
Обратите внимание, что в случае с xfs
мы указываем не само физическое устройство, а точку монтирования. В нашем случае это /mnt/sdc5
, но в частном случае это будет корень.
Вновь обращаемся к GParted и видим, что файловая система расширена до конца.
Если есть доп. разделы
Рассмотрим ситуацию, когда после расширяемого раздела идут другие — SWP, Home, Data и так далее.
В случае SWP облачная инфраструктура предлагает выход из ситуации. Мы можем выделить операционной системе столько памяти, чтобы ей вообще не приходилось применять своп. Затем раздел можно отключить из автозагрузки и удалить, а освободившееся дисковое пространство присоединить к целевому.
Есть и другой вариант, позволяющий сохранить SWP. С точки зрения виртуальной машины диск представляет собой файл в системе хранения данных с разными расширениями — например, VDI или VHDX. Мы можем изменить локацию SWP на файл в файловой системе, которую планируем расширять. Мы не будем говорить о переносе SWP в файл, так как это выходит за рамки нашего материала. Однако в интернете можно найти подробные руководства — вот одна из таких инструкций.
Если вместо SWP за целевым разделом следует раздел с данными, ситуация становится интереснее. К сожалению, в этом случае нельзя расширить файловую систему без простоя. Поэтому на реальной инфраструктуре лучше запланировать технологическое окно в вечернее время.
Для решения задачи мы воспользуемся GParted Live CD — скачать его можно на официальном сайте. Переходим на вкладку Download и загружаем образ.
Подключаем образ к виртуальной машине. Последовательность действий зависит от конкретной системы виртуализации. Загружаемся с диска и видим уже привычный графический интерфейс для расширения файловой системы. Как обычно, начинаем с увеличения доступного объема диска в панели управления облаком.
В этом примере разделом с данными выступает linux-swap. Обновляем информацию по разделам в консоли:
echo 1 > /sys/block/sdd/device/rescan
Затем — информацию в графическом интерфейсе. Видим неразмеченное дисковое пространство объемом в один гигабайт.
Расширим раздел extended до максимального размера. Для этого правой кнопкой мыши вызываем выпадающее меню и выбираем пункт Resize/Move.
Откроется новое всплывающее окно, в котором необходимо подвинуть ползунок в крайнее правое положение. И подтвердить операцию.
Далее открываем меню Resize/Move для раздела с данными — в нашем случае это linux-swap.
Мышкой перемещаем красную рамку в конец жесткого диска, подтверждаем операцию.
Теперь на главном экране раздел linux-swap находится в конце блока extended.
Далее остается произвести расширение целевого раздела и файловой системы.
В верхней части экрана нажимаем кнопку Apply All Operations.
Спустя какое-то время утилита применит все изменения.
У такого подхода есть одна серьезная проблема. Если раздел linux-swap довольно объемный, то его перемещение в конец диска может занять два-три часа. Все это время приложения и сервисы виртуальной машины будут простаивать. Вопрос можно решить, если сформировать в виртуальной инфраструктуре несколько дисков под каждый раздел. Так вы всегда сможете расширить условные /data и /root, поскольку они будут независимы друг от друга.
Другим решением, которое позволит избежать простоев, является разметка диска с помощью LVM.
Если есть LVM
К сожалению, для работы с LVM нет нормальных программ с графическим интерфейсом. Точнее, они есть, но не слишком информативные. Так с логическими томами приходится работать исключительно в командной строке.
В контексте LVM существуют физические тома (physical volume) — это целые неразбитые диски или их разделы. Внутри физических томов также есть разделы, объединённые в volume-groups. Эти группы, в свою очередь, дробятся на логические разделы — еще один уровень абстракции.
Что нам это дает? Рассмотрим два варианта разметки разделов диска. Чисто технически они ничем не отличаются — первый загрузочный, а второй физический том с LVM. В последнем случае он уже разбит на дополнительные разделы.
Может быть и следующая картина. Два раздела лежат в extended partition, а третий стоит отдельно, но добавлен в volume group. На отдельном диске дополнительно выделен раздел и также добавлен в эту группу.
Дополнительный уровень абстракции LVM позволяет нам расширять файловую систему вне зависимости от порядка разделов и предоставляет несколько подходов. Например, можно просто увеличить объём раздела, а можно создать новый и «приписать» его в логическую группу. Главное не переборщить с дроблением, чтобы разметку было проще читать.
Небольшая ремарка — если на диске есть раздел, который монтируется как блочное устройство и не участвует в LVM, то при расширении могут возникнуть проблемы. Здесь нужно или подключать образ Live CD, или перемещать раздел на отдельный виртуальный диск — тогда он не будет мешать увеличивать основной и логические разделы и volume groups.
Перейдем непосредственно к расширению файловой системы с LVM. На нашем тестовом стенде есть диск /dev/sde со следующей структурой:
В панели управления облаком увеличим объем диска на один гигабайт. Отобразим информацию о нем в консоли:
echo 1 > /sys/block/sdd/device/rescan
parted /dev/sde/ print free
Мы видим, что у нас добавилось свободное дисковое пространство.
Разделы, использующие LVM, помечены соответствующим тегом. В этом конкретном примере мы будем увеличивать диск под номером три до необходимого нам объёма. Нам не придется ставить дополнительные утилиты, так как все инструменты по умолчанию присутствуют во всех популярных дистрибутивах Linux.
Мы воспользуемся возможностями parted
. Но предварительно отобразим размер свободного пространства в мегабайтах для наглядности.
parted /dev/sde unit MB print free
Далее смотрим на ключевые столбцы — Start, End и Size. Свободное дисковое пространство заканчивается на точке в 6442 Мбайта.
Чтобы расширить последний раздел, прописываем команду:
parted /dev/sde resizepart 3 6441MB
Обратите внимание, что мы уменьшили цифровое значение в конце на один мегабайт. Проверим внесенные изменения:
parted /dev/sde print free
Свободное дисковое пространство уменьшилось до одного мегабайта, а наш второй раздел имеет объем в 3806 Мбайт.
Вернемся в GParted и обновим информацию по разделам. Сейчас LVM в /dev/sde3 не «растянут» до конца.
Посмотрим на объем текущего физического тома – для этого выполним:
pvdisplay
Как физические тома у нас помечены два устройства — sde2 и sde3. Последний имеет объем в 2,5 Гб, но в GParted эта цифра равна 3,5 Гб. Чтобы исправить ситуацию и синхронизировать значения, нужно выполнить команду:
pvresize /dev/sde3
Повторяем pvdisplay
и видим, что объем физического раздела увеличился.
Визуальное отображение в GParted также изменилось:
Чтобы отобразить существующие логические разделы, обратимся к команде:
lvscan
В нашей группе томов присутствуют два логических раздела — root и data.
Мы можем увеличить любой из этих томов. Для примера расширим /root следующей командой:
lvextend /dev/vg/root -l +100%FREE -r
Ключ -r автоматически расширит и раздел, и файловую систему внутри него (как в случае с xfr, так и с ext). Переходим в GParted и видим, что операция выполнена успешно:
Теперь, если прописать в консоли df -h
, мы увидим, что устройство dev/mapper/vg-root имеет объем в два гигабайта, хотя изначально его объем был равен одному гигабайту.
Как определить разметку
Поговорим о том, как понять, какая разметка у нас используется — с LVM или без? Если после выполнения команды df -h
вы видите исключительно устройства типа /dev/sda — блочные устройства — то разметка выполнена без LVM. Также можно ввести команду lvscan
. Если LVM не используется, то она ничего не отобразит. В противном случае покажет используемые логические разделы. На изображении ниже их два — root и data.
Иногда консоль может отобразить достаточно экзотические варианты, когда используется не dev, а dm0, dm1 и так далее. Чтобы понять, что это за устройства и какие логические разделы следует расширять, можно воспользоваться следующей командой. Она выведет всю информацию об устройствах.
lsblk --output NAME,KNAME,TYPE,SIZE,MOUNTPOINT
Например, мы видим, что dm-0 смонтирован в /mnt/sde-vg-root. Достаточно часто этот путь указывает в корень. И есть еще одна команда:
ls /dev/dm-*
Она отображает все устройства вида dm-*. Как видно на скриншоте ниже, в нашем случае их два.
Пока на этом всё. В следующей части поработаем с реальной виртуальной машиной на операционной системе Linux Mint.
P.S. Продолжается акция при запуске ИТ‑инфраструктуры IaaS c #CloudMTS.
Обновлено: 09.01.2023
Опубликовано: 22.06.2017
В инструкции рассмотрены сценарии расширения дискового пространства разделов в Linux без потери информации.
Принцип увеличения диска:
- Расширение раздела.
- Изменение размера файловой системы.
В зависимости от типа раздела и файловой системы, действия различаются.
Любая работа с диском несет риск потери информации. Перед началом работ убедитесь в наличие резервных копий ценных данных.
Расширение разделов
Обычных
LVM
Изменение размера файловой системы
Использование GParted
Шаг 1. Расширение раздела
Мы рассмотрим варианты работы с обычными томами (разделами) и томами LVM. Проверить, какой тип раздела у нас используется можно командой:
lsblk
Нам интересны варианты part и lvm.
Обычные тома (part)
Допустим, есть диск /dev/sdb и раздел /dev/sdb2, который нужно увеличить. Разберем два подхода, сделать это.
1. С помощью утилиты growpart (без отмонтирования раздела)
Данная утилита позволяет увиличить размер слайса без необходимости его отмонтировать. Это очень удобно для работы с корневыми разделами. Данная утилита не установлена в системе. В зависимости от последней наши действия будут различаться.
а) Для систем DEB:
apt install cloud-guest-utils
б) Для систем RPM:
yum install cloud-utils-growpart
Если наш диск имеет разметку GPT, то потребуется установить также утилиту gdisk.
а) Для DEB:
apt install gdisk
б) Для RPM:
yum install gdisk
Установка growpart завершена. Идем дальше.
Для расширения раздела /dev/sdb2 вводим команду:
growpart /dev/sda 2
Мы должны увидеть что-то на подобие:
CHANGED: partition=2 start=4096 old: size=20965376 end=20969472 new: size=41938910 end=41943006
Готово.
2. С помощью утилиты fdisk/parted (требуется отмонтировать раздел)
Данный способ удобнее тем, что не нужно устанавливать дополнительных утилит, но он потребует отмонтирование раздела. Это можно сделать командой:
umount /dev/sdb2
В случае работы с корневой директорией, отмонтировать ее не получиться. В таком случае необходимо загрузить компьютер с Windows LiveCD или GParted Live.
Подключаемся утилитой fdisk к /dev/sdb:
fdisk /dev/sdb
Если мы работаем с разделом более чем 2Тб, используем утилиту parted.
Смотрим номера разделов:
: p
Удаляем раздел (не переживайте — все данные сохраняются):
: d
: 2
* в моем примере, раздел для удаления на второй позиции.
Создаем новый раздел:
: n
Первичный (primary):
: p
Номер раздела — 2:
: 2
На запрос начального и конечного секторов просто нажимаем Enter.
Если раздел был загрузочный, добавляем соответствующий флаг:
: a
Еще раз проверяем, что получилось:
: p
Сохраняем изменения:
: w
LVM
LVM-тома расширяются на лету, даже для корневых разделов. В данном примере, работаем с /dev/sda.
Открываем диск утилитой fdisk:
fdisk /dev/sda
* напомню, что при работе с диском 2Тб и более, следует использовать утилиту parted.
Создаем еще один раздел:
: n
Первичный:
: p
Номер раздела оставляем тот, который предлагает система (просто нажимаем Enter).
Первый и последний сектора также оставляем по умолчанию для использования всего дискового пространства (еще два раза Enter).
Задаем тип раздела:
: t
Выбираем номер раздела (в моем примере создавался раздел 3):
: 3
Командой L можно посмотреть список всех типов, но нас интересует конкретный — LVM (8e):
: 8e
Сохраняем настройки:
: w
Проинформируем систему, что в таблице разделов произошли изменения:
partprobe
Создаем физический том из нового раздела:
pvcreate /dev/sda3
Смотрим наши Volume Group и для нужного добавляем созданный том:
vgdisplay
vgextend vg_centos /dev/sda3
* в моем примере группа томов LVM называется vg_centos
Смотрим LVM-разделы и расширяем пространства для нужного:
lvdisplay
lvextend -l +100%FREE /dev/vg_centos/lv_root
* данная команда расширяем LVM-раздел /dev/vg_centos/lv_root, используя все свободное пространство (100%FREE).
Шаг 2. Изменение размера для файловой системы
После того, как на предыдущем шаге мы расширили раздел, система по-прежнему будет видеть старый по объему диск. Чтобы это исправить, необходимо выполнить команду по изменению размера файловой системы. В зависимости от последней, команды различаются.
Посмотреть файловую систему:
df -T
ext2/ext3/ext4:
resize2fs /dev/vg_centos/lv_root
XFS:
xfs_growfs /dev/sda2
Reiserfs:
resize_reiserfs /dev/sdb
* обратите внимание, что в данных примерах используются различные устройства.
Если раздел был отмонтирован, монтируем его, например:
mount /dev/sda2 /mnt
Проверяем, что настройки применились:
df -h
Увеличение разделов с Gparted
Если работы выполняются на системе с графическим интерфейсом или есть возможность перезагрузить сервер и загрузиться с LiveCD, можно воспользоваться простым средством — утилитой Gparted, которая позволяем менять размер разделов мышкой.
Запускаем утилиту — выбираем диск, с которым будем работать — кликаем правой кнопкой по разделу, который хотим увеличить и выбираем Resize/Move:
В открывшемся окне с помощью мышки или форм меняем размер раздела:
Нажимаем кнопку Resize/Move.
Проверяем изменения в окне программы и сохраняем настройки кнопкой «Apply All Operations»:
можно ли как-то этот размер уменьшить
Да:
mkdir dir1.new
mv dir1/* dir1.new/
mv dir1/.* dir1.new/
rm -rf dir1/
mv dir1.new dir1
Ну, идею Вы поняли. А так, насколько я знаю, ext4 никогда не reclaim’ает место занятое директорией.
Edit: правда это не совсем вяжется с «Не хочется его пересоздавать», почему?
bugfixer ★★★
(03.03.22 04:20:20 MSK)
Последнее исправление: bugfixer 03.03.22 04:24:24 MSK
(всего
исправлений: 1)
- Показать ответы
- Ссылка
Ответ на:
комментарий
от bugfixer 03.03.22 04:20:20 MSK
Да, я понял. Чтоб процессы не прекращать, не хотелось пересоздавать. Ну да деваться некуда, спасибо.
- Показать ответы
- Ссылка
а если натравить дефрагментатор ?? вполне вероятно они метадату пожмет.
pfg ★★★★★
(03.03.22 09:54:03 MSK)
- Ссылка
Ответ на:
комментарий
от olegkrutov 03.03.22 09:28:06 MSK
На некоторых файловых системах операция выполнима с открытыми файлами.
Elyas ★★★★★
(03.03.22 10:48:23 MSK)
- Ссылка
Ответ на:
комментарий
от olegkrutov 03.03.22 09:28:06 MSK
А не поможет переименование файлов одного за другим из этого каталога в другой на той же фс и обратно в этот?
iliyap ★★★★★
(03.03.22 10:51:34 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от bugfixer 03.03.22 04:20:20 MSK
Если так подходить к задаче — лучше применить не просто копирование, а жесткую или символьную ссылку ФС. Тогда можно пошаманить с содержимым каталога в фоне, а когда будет готово — стопануть сервисы, поменять source ссылки, и стартануть сервисы обратно. Такой финт ушами позволит уменьшить время рестарта системы до минимума.
pup_kin ★
(03.03.22 11:24:43 MSK)
- Показать ответы
- Ссылка
Ответ на:
комментарий
от pup_kin 03.03.22 11:24:43 MSK
символьные — не надо.
Elyas ★★★★★
(03.03.22 11:26:12 MSK)
- Ссылка
Ответ на:
комментарий
от pup_kin 03.03.22 11:24:43 MSK
Символьная ссылка это явно не то.
А вот с жесткими ссылками можно было бы поиграться. Но лично моей квалификации для понимания всех происходящих при этом процессов не хватит.
AVL2 ★★★★★
(03.03.22 12:10:39 MSK)
- Ссылка
Ответ на:
комментарий
от mky 03.03.22 03:58:11 MSK
Есть e2fsck -D, но, ИМХО, это не то, что вам хочется.
Мне тоже кажется, что это оптимальный вариант, но тогда нужен ребут.
e2fsck -D /dev/system/root
e2fsck 1.46.3 (27-Jul-2021)
/dev/system/root is mounted.
e2fsck: Cannot continue, aborting.
AVL2 ★★★★★
(03.03.22 12:13:53 MSK)
- Ссылка
Ответ на:
комментарий
от iliyap 03.03.22 10:51:34 MSK
А не поможет переименование файлов одного за другим из этого каталога в другой на той же фс и обратно в этот?
Нет.
bugfixer ★★★
(03.03.22 14:03:00 MSK)
- Ссылка
Ответ на:
комментарий
от olegkrutov 03.03.22 09:28:06 MSK
Да, я понял. Чтоб процессы не прекращать
Вы чего-то не договариваете. Всё можно провернуть почти атомарно с минимальным downtime.
bugfixer ★★★
(03.03.22 14:07:43 MSK)
- Ссылка
Ответ на:
комментарий
от pup_kin 03.03.22 11:24:43 MSK
лучше применить не просто копирование
Там копий нет. Там есть rename в пределах одной fs. Правильнее делать hardlinks из новой директории, замораживать сервисы, rotate директории, отпускать сервисы, прибивать старую директорию. Но нужно хорошо знать логику сервисов чтобы правильно бороться с race conditions.
bugfixer ★★★
(03.03.22 14:14:28 MSK)
- Показать ответ
- Ссылка
Возможно fsck.ext4 -fvD поможет. Забавно, в NTFS таких проблем нет, у меня 10+ летние разделы живут отлично, каждый по 2 терабайта.
bonta ★★★★
(03.03.22 14:31:41 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от bugfixer 03.03.22 14:14:28 MSK
Там копий нет. Там есть rename в пределах одной fs
Извиняюсь, невнимательно прочитал. Но моя идея про ссылки остается в силе, поскольку в предложенном Вами коде есть дубликат рабочего каталога «dir1.new», я его впопыхах принял за копию.
У ТС работа с каталогом медленно идёт, поэтому даже перемещение, а не только копирование может тормозить. Вот от этих тормозов, IMHO, я и предложил хак с ссылками ФС.
Ещё раз извините за невнимательность.
pup_kin ★
(03.03.22 14:31:45 MSK)
Последнее исправление: pup_kin 03.03.22 14:38:41 MSK
(всего
исправлений: 2)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от pup_kin 03.03.22 14:31:45 MSK
У ТС работа с каталогом медленно идёт, поэтому даже перемещение, а не только копирование может тормозить.
Всё правильно. Но как минимум один раз вычитать все эти 120Mb придётся так или иначе (пара секунд даже на старом добром HDD). Новый каталог будет настолько компактен насколько это возможно.
bugfixer ★★★
(03.03.22 14:56:55 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от bugfixer 03.03.22 14:56:55 MSK
Ответ на:
комментарий
от pup_kin 03.03.22 15:01:21 MSK
Если тот каталог не является текущим ни у одного процесса, то даже mv в пределах файловой системы решит проблему.
vel ★★★★★
(03.03.22 16:05:26 MSK)
- Показать ответ
- Ссылка
Спасибо, теперь я знаю, что EXT* ещё более убогая и устаревшая ФС чем я думал. Проблемы на уровне древней и примитивной FAT.
X512 ★★★★
(03.03.22 16:28:31 MSK)
- Показать ответы
- Ссылка
Ответ на:
комментарий
от X512 03.03.22 16:28:31 MSK
Ответ на:
комментарий
от targitaj 03.03.22 16:31:23 MSK
Ответ на:
комментарий
от X512 03.03.22 16:46:43 MSK
Ответ на:
комментарий
от X512 03.03.22 16:46:43 MSK
в них тоже есть свои плюсы и минусы
абсолюта светящего лучистым светом из-под небесья, чтоб все сразу так на ентую фс перешли, среди них нет.
pfg ★★★★★
(03.03.22 17:24:59 MSK)
- Ссылка
Ответ на:
комментарий
от targitaj 03.03.22 17:20:52 MSK
Be File System. То что используется в Haiku. Использует B+ дерево для директорий.
X512 ★★★★
(03.03.22 17:27:54 MSK)
- Ссылка
Ответ на:
комментарий
от X512 03.03.22 16:28:31 MSK
Спасибо, теперь я знаю, что EXT* ещё более убогая и устаревшая ФС чем я думал. Проблемы на уровне древней и примитивной FAT.
Не всё так однозначно. Поведение директорий на ext4 в чём-то сравнимо с hash table: хотели бы Вы rehash’аться когда load factor падает ниже какого-то threshold после массового удаления элементов? Не уверен. В случае ext4 решение оставили за user space coders, и это правильно «я щитаю» — иначе бы возникали hiccups на пустом месте, в самые неожиданные моменты. Не надо недооценивать людей что за ext4 стоят.
bugfixer ★★★
(04.03.22 07:30:42 MSK)
- Ссылка
Ответ на:
комментарий
от X512 03.03.22 16:46:43 MSK
XFS, ZFS, BFS, NTFS.
Я правильно понимаю что Вы глубоко знакомы со внутренностями всех этих fs types, и знаете как они себя ведут при удалении?
bugfixer ★★★
(04.03.22 07:34:44 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от vel 03.03.22 16:05:26 MSK
Если тот каталог не является текущим ни у одного процесса
Связи не вижу, от слова совсем.
bugfixer ★★★
(04.03.22 07:37:46 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от bugfixer 04.03.22 07:37:46 MSK
Мы перенесли или сделали хардлинк всех файлов в соседний каталог (в рамках одной фс). Переименовали каталоги.
Если процесс который работает с файлами этого каталога открывает их по полному пути, то проблем нет.
А вот если у него этот каталог был текущим и ищет/открывает файлы в нем не по полному пути, то он это переименование каталогов не заметит и будет продолжать пытаться работать с файлами в старом (огромном) каталоге (даже после удаления этого каталога).
lsof/fuser это покажут.
vel ★★★★★
(04.03.22 10:19:12 MSK)
Последнее исправление: vel 04.03.22 10:20:26 MSK
(всего
исправлений: 1)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от bugfixer 04.03.22 07:34:44 MSK
Для BFS писал программу для чтения директорий. Там B+ дерево которое самобалансируется и в худшем случае заполнено наполовину. В XFS примерно тоже самое. Никаких фиксированных таблиц i-нодов, полностью динамическое выделение всех структур.
X512 ★★★★
(04.03.22 15:18:46 MSK)
Последнее исправление: X512 04.03.22 15:19:29 MSK
(всего
исправлений: 1)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от X512 03.03.22 16:28:31 MSK
EXT* ещё более убогая и устаревшая ФС чем я думал. Проблемы на уровне древней и примитивной FAT.
В «древней и примитивной FAT» как минимум изкаропки уже отсутствует проблема ограничения по инодам. То есть это уже на голову более совершенная файловая система.
LamerOk ★★★★★
(04.03.22 15:51:51 MSK)
- Показать ответы
- Ссылка
Ответ на:
комментарий
от LamerOk 04.03.22 15:51:51 MSK
Ответ на:
комментарий
от X512 04.03.22 15:18:46 MSK
Там B+ дерево которое самобалансируется и в худшем случае заполнено наполовину. В XFS примерно тоже самое. Никаких фиксированных таблиц i-нодов, полностью динамическое выделение всех структур.
Я не думаю что Вы понимаете о чём говорите.
bugfixer ★★★
(04.03.22 16:00:56 MSK)
- Ссылка
Ответ на:
комментарий
от vel 04.03.22 10:19:12 MSK
А вот если у него этот каталог был текущим и ищет/открывает файлы в нем не по полному пути, то он это переименование каталогов не заметит и будет продолжать пытаться работать с файлами в старом (огромном) каталоге (даже после удаления этого каталога).
Good point. Если процесс держит cwd за хвост в форме fd — так и произойдёт.
bugfixer ★★★
(04.03.22 16:32:58 MSK)
Последнее исправление: bugfixer 04.03.22 16:56:58 MSK
(всего
исправлений: 1)
- Ссылка
Ответ на:
комментарий
от LamerOk 04.03.22 15:51:51 MSK
mkdir new_folder
ln folder/* new_folder
mv folder old_folder ; mv new_folder folder
Nastishka ★★★★★
(05.03.22 02:20:39 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от Nastishka 05.03.22 02:20:39 MSK
С учетом что изначально в топике речь про мульон файликов, вот на этом этапе folder/*
может возникнуть проблема. Лучше эту строку заменить на find…
anc ★★★★★
(05.03.22 04:01:34 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от anc 05.03.22 04:01:34 MSK
Их в основном удалили
Именно проблема в том, что файлов мало, но чтение каталога долгое, читается много пустых direntry.
Скорее, может возникнуть проблема с правами доступа. Я даже не знаю, есть ли команда, которая создаёт каталог и копирует все права с другого (включая acl, selinux).
mky ★★★★★
(05.03.22 04:34:05 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от mky 05.03.22 04:34:05 MSK
Я даже не знаю, есть ли команда, которая создаёт каталог и копирует все права с другого (включая acl, selinux).
cp… ^c
anc ★★★★★
(05.03.22 05:05:17 MSK)
- Ссылка
Ответ на:
комментарий
от bonta 03.03.22 14:31:41 MSK
в NTFS таких проблем нет
Прямо сейчас наблюдаю директорию размером 160 килобайт, в которой осталось всего 7 файлов. (Смонтировал диск под линуксом, смотрю размер в MC.) Возможно, там просто преимущественное кеширование директорий, которое компенсирует задержки?
question4 ★★★★★
(06.03.22 11:06:21 MSK)
- Ссылка
Ответ на:
комментарий
от mky 05.03.22 02:09:19 MSK
На fat32 даже не протестить проблему, описываемую ТС.
Неоднократно наблюдал её на флешке. Поставил неправильный размер тома архиватору, насоздавал мелких файлов, упёрся в лимит, удалил их, после этого чтение пустой директории длится секунд 5-10. Когда это случалось в корне, лечил форматированием.
question4 ★★★★★
(06.03.22 11:11:05 MSK)
- Ссылка
30.06.16 — 14:20
Добрый день. Имеются следующие каталоги с соответствующим размером:
[root@1cserv ~]# pvdisplay -m
— Physical volume —
PV Name /dev/sda2
VG Name centos
PV Size 299,51 GiB / not usable 3,00 MiB
Allocatable yes
PE Size 4,00 MiB
Total PE 76674
Free PE 16
Allocated PE 76658
PV UUID 3eCBMP-mc94-T8dh-BQqE-KD0x-eJMn-uESCQK
— Physical Segments —
Physical extent 0 to 511:
Logical volume /dev/centos/swap
Logical extents 0 to 511
Physical extent 512 to 63857:
Logical volume /dev/centos/home
Logical extents 0 to 63345
Physical extent 63858 to 76657:
Logical volume /dev/centos/root
Logical extents 0 to 12799
Physical extent 76658 to 76673:
FREE
Когда смотрю свойства комьютера, то не вижу объема памяти из раздела каталога home. Не могу понять он входит в общий диск или нет. Вопрос возникает такой так как есть предостережения, что когда — нибудь место в папке root закончится и будет авральная ситуация. Раздел sda диска один, размер такой же как у папки home и один раздел boot 500 MB. По умолчанию не желательно делать раздел root большим. Помогите советом как поступить в этой ситуации? Спасибо.
1 — 30.06.16 — 14:33
«Когда смотрю свойства комьютера, то не вижу объема памяти из раздела каталога home» — что тут написано?!
df -h что показывает?
2 — 30.06.16 — 14:34
[root@1cserv ~]# df -h
Файловая система Размер Использовано Дост Использовано% Cмонтировано в
/dev/mapper/centos-root 50G 15G 36G 30% /
devtmpfs 7,8G 0 7,8G 0% /dev
tmpfs 7,8G 88K 7,8G 1% /dev/shm
tmpfs 7,8G 8,9M 7,8G 1% /run
tmpfs 7,8G 0 7,8G 0% /sys/fs/cgroup
/dev/mapper/centos-home 248G 5,4G 243G 3% /home
/dev/sda1 497M 166M 331M 34% /boot
tmpfs 1,6G 0 1,6G 0% /run/user/26
tmpfs 1,6G 0 1,6G 0% /run/user/992
tmpfs 1,6G 0 1,6G 0% /run/user/1000
[root@1cserv ~]#
3 — 30.06.16 — 14:36
(2) И чего ты паришься? 36 гигов под систему и 243 гига под home
4 — 30.06.16 — 14:39
(3) Лучше бы объяснил что каталоги могут в отдельных размерах или даже на разных дисках лежать
5 — 30.06.16 — 14:39
Но, отвечая на вопрос в (0), — есть lvresize
6 — 30.06.16 — 14:39
(4) *отдельных разделах
7 — 30.06.16 — 14:39
(4) Ещё бы понять, что ТС называет «каталогами».
8 — 30.06.16 — 14:43
(7) А это уже вопрос да.
9 — 30.06.16 — 14:44
(3) просто 1С и прочее установлено в разные папки opt и др., так как почти во всех папках столько же места, как и в root, кроме home, то задумался, а что будет когда в root не будет места и куда пишет 1С, PostgreSQL и другие программы свои данные
(4) это я понимаю, возможно не так выразился, спасибо, что написали)
(7) папки вида home, root, opt, etc, var и прочее.
10 — 30.06.16 — 14:45
(9) 1с в opt? У тебя гента?
11 — 30.06.16 — 14:45
(10) centos же
12 — 30.06.16 — 14:46
(10) в opt, CentOS 7
13 — 30.06.16 — 14:47
(11) (12) А зачем превращать приличную (относительно) систему в генту?
14 — 30.06.16 — 14:48
(13) Не совсем понимаю Вас)
15 — 30.06.16 — 14:48
(13) 1С из rpm/deb ставится в /opt по-умолчанию.
16 — 30.06.16 — 14:48
А что, кто-то 1С на генте запускает?!
17 — 30.06.16 — 14:49
(15) А почему у меня в /usr/local ставилась?
18 — 30.06.16 — 14:49
(16) Не знаю, я установил себе на сервер CentOS 7))
19 — 30.06.16 — 14:50
(17) Может потому что у тебя гента?
20 — 30.06.16 — 14:51
(19) у меня был дебиан. А потом бубунта-сервер.
Всё для тестов и развлечений.
21 — 30.06.16 — 14:54
Мне оставить все как есть или как в (5) посредством этого переместить немного места из home в root?
22 — 30.06.16 — 14:58
Проблема в том, что в centos 7 используется xfs. А у нее нет штатных механизмов шринка.
23 — 30.06.16 — 15:01
(22) Логически, что все программы пишутся в root, а в home в текущий момент делаются только автобэкапы, выходит, что нужно придумать какое — то тогда перенаправление данных в home или как поступить?
24 — 30.06.16 — 15:03
(23) начни лучше с убунты, по ней много форумов и информации в рунете.
25 — 30.06.16 — 15:03
(23) Программы должны писаться в /usr.
26 — 30.06.16 — 15:05
(23) Старое доброе ln -s спасет отца русской демократии
27 — 30.06.16 — 15:05
(25) Но если это так, то там столько же места, как в root : )
28 — 30.06.16 — 15:13
ln -s /opt/1C/v8.3/x86_64/ /home/opt/1C/v8.3/x86_64/ ?
Верно написал?) Полагаю после этого данные будут писаться в home? Так как :
Символическая ссылка (еще известная как мягкая ссылка) — это особый файл (запись) который указывает на фактическое местоположения файла или папки на диске (как ярлык в Windows).
Символические ссылки постоянно используются для линкования библиотек и часто используются для линкования файлов и папок на удаленной файловой системе примонтированной по NFS.
Команда ln — это стандартная утилита в Linux для создания ссылок.
29 — 30.06.16 — 15:15
Цитата из ИТС: «В операционной системе Linux служебные файлы кластера серверов будут расположены в папке /home/usr1cv8/.1cv8/1C/1cv8 (или сокращенный вариант записи – ~/.1cv8/1C/1cv8).» 1C и так все свое в /home пишет.
А базы PostgreSQL где размещены?
30 — 30.06.16 — 15:18
(29) /var/lib/pgsql
31 — 30.06.16 — 15:26
(30) Если базы не разрастаются лавинообразно, от оставь как есть, на /home место быстрее может закончиться из-за бекапов или журнала регистрации, например.
По хорошему — поставить еще два диска, на один базы Postgre, на другой бэкапы.
32 — 30.06.16 — 15:28
(28) вообще-то, наоборот.
ln -s <что> <куда>
так, как ты написал, всё равно будет писать в /opt, только каталог из /opt будет виден как /home/opt
тебе надо создать каталог в /home и прилинковать в нужное место (/opt или /var), чтобы система его видела как подкаталог
33 — 30.06.16 — 15:38
(31) Быстро растет) Спасибо Вам
(32) ln -s /home/dump1С/ /opt/1C/v8.3/x86_64/ так?)
34 — 30.06.16 — 15:42
(33) да, только перед этим надо скопировать все из старого места в новое. А то оно «скроется»
35 — 30.06.16 — 15:51
(34) а после копирования содержимого и линкования она будет писаться только в новую папку /home/dump1C ? Спасибо Вам за ответы) Очень помогли в освоении этой проблемы)
bogus
36 — 05.07.16 — 09:42
ln -s /home/dump1С//opt/1C/v8.3/x86_64/ прописал эту команду, только для папок postgresql, команда ls -al выводит, что папка прилинкована, но размер папок разный или я чего — то не так понимаю? Оно ведь должно писать данные и туда и туда? И если одна папка будет по каким — то причинам удалена, то будет браться информация из копии к которой прилинкована… Верно?
- Печать
Страницы: [1] Вниз
Тема: Изменение размера папки home (Прочитано 2419 раз)
0 Пользователей и 1 Гость просматривают эту тему.

x_shark_x
Всем доброго времени суток. Стоит дуалбут, Windows 7 и Linux Mint 17.2, при установке на папку home выделил всего 40 гигабайт(систему ставил для ознакомления, но теперь виндой почти не пользуюсь и на ней есть неиспользуемое место), теперь же этого нехватает и сразу появился вопрос о расширении размера. Изменить размер пробовал через GParted Live(загрузился с флешки), но после «отрезания» от диска D 60гиг. размер home можно только уменьшить(в строчке «свободное место до» значится 0мб), но при этом из свободного места (60гиг) можно сделать новую директорию(но в итоге делать ничего не стал). Заранее благодарю за помощь.
P.S. Гуглом пользовался, ничего не нашёл.

Yuriy_Y
Плохо пользовался. Возможно тм надо еще передвигать разделы, что займет длительное время. Без скрина с Gparted сложно предполагать. Можно проанализировать, что у тебя занимает много места и при монтировать свободный раздел в этот каталог.

Azure
x_shark_x,
Или показывай скрин, или хотябы выхлоп команды:
sudo parted -l
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

x_shark_x
Вот, с GParted Live скрин сделать не удалось, поэтому использовал Live Mint’а.

gamayun
Вот, с GParted Live скрин сделать не удалось, поэтому использовал Live Mint’а.
так лучше видно
ну винда тут не страдает,все в расширенном разделе sda4,неизвестный sda5 удалить,sda6 переноситься к началу sda4,на все освободившееся место раздвигаете свой home-sda7
Все это в режиме liveCD,чтоб никаких «ключиков» у разделов не было нарисовано.
И uuid передвигаемых разделов на бумажку записать,вдруг fstab править придется.
И главное чтоб свет не отрубили,тогда следующая тема будет «не грузиться…»

x_shark_x
Всем большое спасибо за ответы, всё получилось, правда граб сломался, но теперь всё работает нормально.
- Печать
Страницы: [1] Вверх
We are using below code to create folder in Linux server.
File dir = new File(filePath);
if(!dir.isDirectory())
dir.mkdirs();
After that creating files inside that programatically and writing into it.
But the problem is after certain size new files are not getting created.(Even free space is there in the folder).
Is there any restriction for no. of file or folder size? Please let me know how to check.
asked Oct 28, 2015 at 7:27
2
There is a limit to the number of files that can be created in a partition, and in a directory.
I found the following information from here.
FAT32:
- Maximum number of files: 268,173,300
- Maximum number of files per directory: 216 — 1 (65,535)
- Maximum file size: 2 GiB — 1 without LFS, 4 GiB — 1 with
NTFS:
- Maximum number of files: 232 — 1 (4,294,967,295)
- Maximum file size
- Implementation: 244 — 26 bytes (16 TiB — 64 KiB)
- Theoretical: 264 — 26 bytes (16 EiB — 64 KiB)
- Maximum volume size
- Implementation: 232 — 1 clusters (256 TiB — 64 KiB)
- Theoretical: 264 — 1 clusters
ext2:
- Maximum number of files: 1018
- Maximum number of files per directory: ~1.3 × 1020 (performance issues past 10,000)
- Maximum file size
- 16 GiB (block size of 1 KiB)
- 256 GiB (block size of 2 KiB)
- 2 TiB (block size of 4 KiB)
- 2 TiB (block size of 8 KiB)
- Maximum volume size
- 4 TiB (block size of 1 KiB)
- 8 TiB (block size of 2 KiB)
- 16 TiB (block size of 4 KiB)
- 32 TiB (block size of 8 KiB)
ext3:
- Maximum number of files: min(volumeSize / 213, numberOfBlocks)
- Maximum file size: same as ext2
- Maximum volume size: same as ext2
ext4:
- Maximum number of files: 232 — 1 (4,294,967,295)
- Maximum number of files per directory: unlimited
- Maximum file size: 244 — 1 bytes (16 TiB — 1)
- Maximum volume size: 248 — 1 bytes (256 TiB — 1)
answered Oct 28, 2015 at 7:41
3
We are using below code to create folder in Linux server.
File dir = new File(filePath);
if(!dir.isDirectory())
dir.mkdirs();
After that creating files inside that programatically and writing into it.
But the problem is after certain size new files are not getting created.(Even free space is there in the folder).
Is there any restriction for no. of file or folder size? Please let me know how to check.
asked Oct 28, 2015 at 7:27
2
There is a limit to the number of files that can be created in a partition, and in a directory.
I found the following information from here.
FAT32:
- Maximum number of files: 268,173,300
- Maximum number of files per directory: 216 — 1 (65,535)
- Maximum file size: 2 GiB — 1 without LFS, 4 GiB — 1 with
NTFS:
- Maximum number of files: 232 — 1 (4,294,967,295)
- Maximum file size
- Implementation: 244 — 26 bytes (16 TiB — 64 KiB)
- Theoretical: 264 — 26 bytes (16 EiB — 64 KiB)
- Maximum volume size
- Implementation: 232 — 1 clusters (256 TiB — 64 KiB)
- Theoretical: 264 — 1 clusters
ext2:
- Maximum number of files: 1018
- Maximum number of files per directory: ~1.3 × 1020 (performance issues past 10,000)
- Maximum file size
- 16 GiB (block size of 1 KiB)
- 256 GiB (block size of 2 KiB)
- 2 TiB (block size of 4 KiB)
- 2 TiB (block size of 8 KiB)
- Maximum volume size
- 4 TiB (block size of 1 KiB)
- 8 TiB (block size of 2 KiB)
- 16 TiB (block size of 4 KiB)
- 32 TiB (block size of 8 KiB)
ext3:
- Maximum number of files: min(volumeSize / 213, numberOfBlocks)
- Maximum file size: same as ext2
- Maximum volume size: same as ext2
ext4:
- Maximum number of files: 232 — 1 (4,294,967,295)
- Maximum number of files per directory: unlimited
- Maximum file size: 244 — 1 bytes (16 TiB — 1)
- Maximum volume size: 248 — 1 bytes (256 TiB — 1)
answered Oct 28, 2015 at 7:41
3