#unix #disk #diskspace #quota #mv
#unix #диск #дисковое пространство #квота #mv
Вопрос:
Я нахожусь в ситуации, когда мне приходится тестировать команду mv (1), когда дисковая квота превышена.
Кто-нибудь может сообщить мне шаги по созданию этого .. я имею в виду, как я могу сделать дисковую квоту полной на обычной тестовой машине Unix.
Спасибо.
Комментарии:
1. Загрузите кучу порно. Это воссоздаст условия, наиболее похожие на те, которые встречаются в корпоративной среде.
Ответ №1:
dd if=/dev/zero of=/home/usverg/test bs=1M count=1024
Где count — это количество МБ, которое вы должны заполнить 🙂
Ответ №2:
Либо установите очень маленькую квоту, используя любые инструменты квотирования, предлагаемые вашей операционной системой и файловыми системами, либо просто заполняйте файловую систему, создавая большие файлы (используя dd
, например), пока квота не будет превышена или очень близка к этому.
Комментарии:
1. Может возникнуть проблема, если это рабочий раздел, с которым вы не можете на самом деле возиться таким образом.
2. Вы не должны тестировать что-либо в производственных средах.
3. Также может потребоваться много времени для заполнения (скажем) раздела объемом 150 ГБ. Однако искусственно установить низкую квоту — хорошая идея.
4. ну, да, это может занять немного времени. Вероятно, лучше всего сделать и то, и другое (небольшая, но все же реалистичная квота — т. Е. Не 64 кб, заполненная реальными файлами).
Ответ №3:
Я также заинтересован в проведении тестирования «полного диска». (Я написал некоторый Java-код, чувствительный к сценариям переполнения диска, но мне нужно его протестировать.)
Чтобы развить идею Нуфаля Ибрагима № 2, я провел небольшое исследование и нашел все необходимые команды для настройки и демонтажа устройства mount for loop. Это позволит вам создать крошечное временное подключение. Вы можете заполнить ее и провести тестирование «переполнения диска».
Мои команды предназначены для Debian Linux. Ваши пути могут немного отличаться.
Вот сценарий:
#!/bin/bash
_pwd=$(pwd -P)
usage() {
echo "Setup or Teardown a loop device mount"
echo
echo "Normally, mount amp; umount require root-level access."
echo "You may need to run this script via 'sudo'."
echo
echo "Usage 1: $0 setup FILE SIZE DEVICE MOUNT"
echo " FILE is the virtual file system in a single file"
echo " SIZE is the size of the virtual filesystem in 'dd' format"
echo " The minimum size appears to be 2M for ext3 file systems."
echo " DEVICE is the loop device"
echo " MOUNT is the mount point (directory)"
echo
echo "Usage 2: $0 teardown FILE DEVICE MOUNT"
echo
echo "Example: $0 setup ./data.ext3 2M /dev/loop0 /mnt/loop0"
echo "Example: $0 teardown ./data.ext3 /dev/loop0 /mnt/loop0"
echo
exit 1
}
execute_command() {
local command="$1"
echo ">>> $command"
eval "$command"
local exit_code=$?
if [ "0" != "$exit_code" ] ; then
echo ">>> Command failed with exit code: $exit_code"
exit 1
fi
}
execute_bad_command() {
local command="$1"
echo ">>> $command"
eval "$command"
local exit_code=$?
if [ "0" == "$exit_code" ] ; then
echo ">>> Command unexpectedly successful!"
exit 1
fi
}
if [ -z "$1" ] ; then
usage
fi
if [ "setup" = "$1" ] ; then
if [ "5" != "$#" ] ; then
usage
fi
VFS=$2
SIZE=$3
DEVICE=$4
MOUNT=$5
# Create a file
execute_command "dd if=/dev/zero of=${VFS} bs=${SIZE} count=1"
# Format the file with ext3 filesystem
# We need 'yes' here to ignore:
# ./data is not a block special device.
# Proceed anyway? (y,n)
execute_command "yes | /sbin/mkfs -t ext3 -m 1 -v ${VFS}"
if [ -d ${MOUNT} ] ; then
execute_command "rmdir ${MOUNT}"
fi
# Create the mount point and enable read/write/execute for all users
execute_command "mkdir -m 0777 ${MOUNT}"
# Mount the file
execute_command "mount ${VFS} ${MOUNT} -t ext3 -o loop=${DEVICE}"
# Check the loopback setup
# Example output: /dev/loop0: [0801]:17416195 (/home/kca/saveme/disk-full-test/data)
execute_command "/sbin/losetup ${DEVICE}"
# Test write
execute_command "echo abc > ${MOUNT}/dummy.txt"
# Clean-up test write
execute_command "rm ${MOUNT}/dummy.txt"
echo "Try to fill new mount with junk data:"
# We expect to fail and see this error message:
# dd: writing `/mnt/loop0/data': No space left on device
execute_bad_command "dd if=/dev/zero of=${MOUNT}/junk bs=${SIZE} count=2"
# Clean-up junk write
execute_command "rm ${MOUNT}/junk"
echo "Loop device mount setup and testing complete:"
echo "${MOUNT}"
elif [ "teardown" = "$1" ] ; then
if [ "4" != "$#" ] ; then
usage
fi
VFS=$2
DEVICE=$3
MOUNT=$4
# Unmount the file
execute_command "umount ${MOUNT}"
# Check loop device after mount. We expect to fail.
# loop: can't get info on device /dev/loop0: No such device or address
execute_bad_command "/sbin/losetup ${DEVICE}"
execute_command "rmdir ${MOUNT}"
execute_command "rm ${VFS}"
echo "Loop device mount teardown complete."
else
usage
fi
exit 0
Ответ №4:
- Вы можете вручную установить свою квоту на что-то действительно низкое, а затем попробовать свою команду.
- Вы можете создать (скажем) файл размером 10 МБ, а затем отформатировать его как раздел ext3 и смонтировать с помощью интерфейса обратной связи. Затем вставьте компакт-диск в эту точку монтирования, и у вас будет максимальный размер 10 МБ.