1. 디스크가 가득 찼습니다.

1. 디스크가 가득 찼습니다.

veracrypt로 암호화된 드라이브에 남은 디스크 공간이 없는 파일을 삭제해도 디스크 공간이 확보되지 않습니다.

설명된 대로 하나의 하드 드라이브를 다른 하드 드라이브와 동기화하려고 합니다.여기.

대상 드라이브가 가득 차서 디스크 공간을 확보할 수 없습니다. 를 실행하는 등 다양한 방법으로 파일을 삭제해 보았는데 rm /.../file돌핀 파일 탐색기에 여유 디스크 공간이 표시되지 않을 뿐만 아니라 예를 들어 df -h사용 가능 열에 0, 사용률 %에 100%가 표시됩니다.

실제로 파일을 삭제하고 디스크 공간을 확보하는 방법아니면 단지 오류만 표시하는 경우 실제 사용 가능한 디스크 공간을 표시하도록 하시겠습니까? 저는 데비안과 KDE를 사용하고 있습니다.


세부문제가 발생하는 방식그리고 내가 시도한 다른 것들:

문제는 "장치에 남은 공간 없음"(이 역시 발생해서는 안 됨)에 도달하고 Grsync가 루트 소유 파일을 백업하지 않기 때문에 오류와 함께 완료된다는 것입니다.

그런 다음 위에서 설명한 대로 콘솔에서 Grsync의 rsync 명령을 실행했습니다. 명령은sudo rsync -r -t -p -o -g --delete -l -s /media/veracrypt1 /media/veracrypt2

"비정규 파일 건너뛰기" 오류가 많이 발생했지만 이는 별도의 문제였으며(100.0% 백업해야 함), 장치에 많은 GB의 여유 디스크 공간이 있음에도 불구하고 "장치에 남은 공간 없음" 오류로 끝났습니다. 디스크1 . sudo lsof | grep {diskname}disk2는 아무 것도 사용되지 않음을 보여줍니다. 물론 rsync 프로세스가 실행되고 있지 않습니다. 그 동안 드라이브를 여러 번 재부팅하고 마운트 해제하고 다시 설치했습니다.

내가 겪고 있는 문제는 다른 동기화를 허용하기 위해 디스크 공간을 확보하기 위해 disk2에서 무언가를 삭제할 때 Dolphin 파일 브라우저에 표시되지 않거나 입력할 때 lsblk -f또는 사용 가능한 디스크 공간이 더 있을 때 df(후자는 여전히) 표시되지 않는다는 것입니다. 열에 0) available)이 표시됩니다.

Dolphin에서 파일을 마우스 오른쪽 버튼으로 클릭하고 삭제를 선택하여 파일을 삭제해 보았습니다. "휴지통으로 이동"도 시도했지만 백업용 휴지통 폴더만 있고(Grsync를 사용하여 제외할 수 없음) 드라이브 루트에는 휴지통 폴더가 없습니다.

유제내 /home/ 파티션(다른 드라이브)에서 발생했지만 재부팅 후 해결되었습니다. 재부팅하고, 드라이브를 제거하고 다시 설치하고, Debian12로 업그레이드한 후에도 여기에 설명된 문제는 사라지지 않습니다.

콘텐츠를 삭제해도 여유 공간은 여전히/즉시 0바이트입니다. 그럼에도 불구하고 크고 빠르게 성장하는 파일을 확인했지만 gdmap아무것도 찾을 수 없었습니다. 업그레이드 후 디스크의 파일이 열려 있는지는 표시되지 않지만 디스크의 파일은 열려서는 안 되는 것 같습니다 sudo lsof | grep "/media/"(일부 파일이 열려 있어도 출력이 없음).

난 이미 시도했어이 문제. 예를 들어 IUse%표시 비율이 매우 낮습니다. sudo dumpe2fs /media/veracrypt2/ | grep -i reserved그냥 말해도 출력이 표시 dumpe2fs: Is a directory while trying to open /media/veracrypt2/되지 않습니다 . 이 드라이브에서는 아무 것도 쓰거나 읽어서는 안 됩니다.sudo lsof +L1 | grep mediasudo lsof | grep deleted | grep media


불필요한 세부정보를 건너뛰세요.

로그아웃했다가 다시 로그인하여 세션을 다시 시작하면 문제가 해결될 것이라고 생각했지만 문제가 해결되지 않았습니다. 여전히 여유 디스크 공간이 0바이트로 표시됩니다. rm filename또한 디스크 공간을 확보하지 않습니다. 요청한 대로 출력은 lsof | grep deleted다음과 같습니다. 많은 메시지가 여러 번 표시되며 일부 열을 생략하고 ID를 바꿨습니다.

pulseaudi ... /memfd:pulseaudio (deleted)
ksmserver ... /home/username/.cache/ksycoca5_{lang}_{id} (deleted)
plasmashe ... /home/username/.cache/ksycoca5_{lang}_{id} (deleted)
plasmashe ... /home/username/.cache/appstream/appcache-{id}.mdb (deleted)
vorta ... /usr/share/mime/mime.cache (deleted)
{texteditor} ... /home/username/.cache/ksycoca5_{lang}_{id} (deleted)
konsole ... /home/username/.cache/konsole/#{number} (deleted)

세션을 다시 시작한 후 프린터 프로그램은 추가 .lock 파일, 두 개의 pulseaudi 및 konsole 파일을 열지만 그게 전부입니다. Dolphin이 올바른 여유 공간을 표시 하더라도 lsblk -f여전히 디스크 공간을 확보할 수 없습니다.

다시 시도했는데 lsof +L1그게 전부였음에도 불구하고(콘솔을 열 때) 더 많은 디스크 공간이 표시되지 않았습니다.

COMMAND       PID     USER   FD   TYPE DEVICE SIZE/OFF NLINK    NODE NAME
konsole    549098 username   20u   REG  254,2        0     0 8257752 /home/username/.cache/konsole/#8257752 (deleted)
konsole    549098 username   21u   REG  254,2        0     0 8257764 /home/username/.cache/konsole/#8257764 (deleted)
konsole    549098 username   22u   REG  254,2        0     0 8259787 /home/username/.cache/konsole/#8259787 (deleted)
konsole    549098 username   23u   REG    0,1  3677184     0 2372415 /memfd:wayland-cursor (deleted)
veracrypt 2340184 username    9u   REG    0,1  3677184     0   69165 /memfd:wayland-cursor (deleted)
xdg-deskt 2340702 username    8u   REG    0,1  3677184     0   69892 /memfd:wayland-cursor (deleted)

나는 또한 그것을 시도했지만 sudo lsof | grep deleted | grep mountname아무런 결과도 얻지 못했습니다. mountname은 내가 거기에 마운트했기 때문에 디렉토리의 일부입니다( sudo lsof | grep mountname1다른 드라이브에 열려 있는 파일에 대해 작동하며 sudo lsof | grep mountname아무것도 표시하지 않습니다).

이것은베라 암호화허점,문제는 여기에 있다.

답변1

나는 이 시나리오를 다른 컴퓨터에서 여러 번 실행했습니다. 당신이 나와 같은 상황에 처할 것이라고 보장할 수는 없지만 시도해 볼 가치가 있다고 믿습니다.

Veracrypt와 실제로 관련이 없는 두 가지 다른 질문이 있는 것 같습니다. 이것은 단지컨테이너파일 시스템의 경우.

  1. 디스크가 꽉 찼습니다. 일부 파일을 삭제하면 디스크가 꽉 찬 상태로 유지됩니다.

  2. 디스크그러지 말았어야 했어채우는.

1. 디스크가 가득 찼습니다.

사례 (1)은 디스크를 다시 마운트하고 재부팅했기 때문에 삭제된 파일이나 설명되지 않은 공간에 의존하지 않습니다. 그러면 삭제된 열린 파일이 제거되고 필요한 경우 fsck가 강제 실행됩니다.

1.1 뭔가 계속 쓰느라 디스크가 꽉 찼어요

그렇다면 우리에게는 두 가지 해결책이 있습니다. 하나는일부 기존 파일에 추가된 내용이 여전히 디스크에 기록되고 있습니다.(이것은 일반적으로 내 로그 파일에서 발생합니다). 프로세스에 써야 하는 20MB의 백로그가 있지만 디스크가 가득 차서 쓸 수 없고 15MB 파일을 삭제했다고 가정해 보세요. 여유 공간이 즉시 다시 채워집니다. 이를 확인하는 유일한 실용적인 방법은 디스크 계정을 실행하고(다른 장치의 파일에 대해) ls -laR일부 파일을 삭제하여 공간을 확보하고 계정을 다시 실행한 다음 두 계정을 비교하는 것입니다. 물론 두 번째 파일의 일부 파일(삭제한 파일)이 사라졌지만 일부 다른 파일도 나타나거나 크기가 늘어났다는 것을 알 수 있습니다.

계정에 열려 있는 파일만 사용하여 이 작업을 수행 할 수 lsof있어 훨씬 빠르지만 생성되고 채워지고 닫힌 파일이 손실될 수 있습니다.

du -sk /mnt/disk/*/*/* > /tmp/before.txt예를 들어 디스크 탑재 지점에서 최대 3개의 폴더까지 모든 폴더의 공간을 나열하여 이 작업을 수행 할 수도 있습니다 . 이를 통해 크기가 증가한 폴더를 빠르게 지울 수 있습니다.

1.2 디스크확실히5% 루트 예약으로 인해 전체

두 번째 가능성은 파일 관리자입니다.루트 예약 공간이 제대로 고려되지 않았습니다.. 전부는 아니지만 대부분의 Linux 파일 시스템예약일부 공간(보통 5%)은 루트 작업에 사용되며 일부 중요한 성능을 향상시킵니다. 루트 시작 작업으로 디스크가 가득 차고 루트가 아닌 사용자가 남은 사용량이 95% 이상인 일부 파일을 삭제하면 루트가 아닌 사용자는 계속해서 디스크가 완전히 가득 차는 것을 보게 됩니다.

다음을 사용하여 전체 파일 시스템과 여유 공간을 확인할 수 있습니다.

tune2fs -l /dev/mapper/yourcryptdevicename

5%에서 1%로 변경할 수 있습니다.

tune2fs -m 1 /dev/mapper/yourcryptdevicename

이렇게 하면 루트가 아닌 사용자에게 남은 4%의 여유 공간이 "다시 나타납니다".

2. 디스크가 가득 차서는 안 됩니다.

이는 500GB 디스크에 400GB 파일을 넣고 채우는 경우에만 적용됩니다. 차이가 5% 미만인 경우에는 이유 1.1의 영향이므로 별도의 설명 없이 이 방법으로 해결할 수 있습니다.

그렇지 않으면 디스크 공간이 기본 블록 단위의 배수(4K일 수 있음)로 할당됩니다. 이런 일이 발생하면 6K 파일에는 두 개의 블록이 필요하며 이를 생성하면 디스크에서 8K의 여유 공간이 손실됩니다. 이것은 때때로 호출됩니다.여유 공간평균은 블록 크기의 절반에 보유한 파일 수를 곱한 값과 같습니다.

따라서 랩톱에서 NAS로 소스 및 라이브러리 트리를 동기화하면 랩톱에는 2K 블록이 있고 NAS에는 4K 블록, 즉 49Gb가 있습니다.실제로 사용됨1,797,479개의 파일이 있지만 실행하면 du -sk --apparent-size44GB를 얻습니다. 49GB는 실제로 작은 파일이 많은 여유 공간을 차지하는 것을 방지하기 위한 ext4 파일 시스템의 몇 가지 트릭 덕분입니다. 이러한 트릭이 없는 NAS에서는 처음부터 블록이 두 배로 늘어나 동일한 44GB 파일이 56GB를 차지합니다. 전체 SSD의 가치를 확장하면 아마도 880GB의 파일이 있을 것입니다.1TB SSD 드라이브에는 적합하지 않습니다..

이것이 사실인지 확인하려면 다음을 실행하십시오.

tune2fs -l /dev/yourpartition | grep "Block size:"

une2fs 출력에는 무슨 일이 일어나고 있는지 확인하는 데 도움이 될 수 있는 추가 정보가 있습니다. 예를 들어 동기화 중인 두 디스크의 출력을 비교하고 특정 파일을 삭제한 후 동일한 디스크의 출력을 비교합니다.

Inode count:              365985792
Block count:              1463919616
Free blocks:              72775504
Free inodes:              176130892

답변2

다음에서 가져온 정보Linux의 df 파일이 삭제 후 올바른 여유 공간을 표시하지 않음, 다른 답변, Google 검색결과, 경험과 결합됩니다.

수많은 댓글 작성자는 답변의 절반만 제공할 수 있습니다. lsof |grep deleted영향을 받은 파일만 나열되어 있지만 위에 링크된 Ignacio의 말을 인용하면 다음과 같습니다.

파일 이름을 삭제해도 실제로 파일이 삭제되는 것은 아닙니다. 일부 다른 프로세스가 파일을 열어두어 파일이 삭제되는 것을 방지하고 있습니다. 파일을 해제하려면 프로세스를 다시 시작하거나 종료하세요.

사용:

lsof +L1 삭제된 파일을 사용하여 모든 프로세스를 나열합니다(댓글을 기반으로 이 작업을 수행했지만 댓글에서는 이 작업을 수행하는 이유를 알 수 없습니다). lsof은 약어이다파일 설명자 목록 열기. 여기서 핵심 단어는설명자. 삭제된 파일을 열어두었던 프로세스를 종료하려면 파일 설명자가 필요합니다. 이를 사용하여 kill - 15 PID프로세스를 종료할 수 있습니다(PID는 위의 줄임표와 함께 출력에 나열되어야 합니다). [참조:언제 -9 프로세스를 종료하면 안 되나요??] 또는 다음과 같이 열려 있는 파일 설명자를 종료할 수 있습니다.

  1. cd /proc/PID/fd:PID가 다시 타원 안에 숫자로 나열됩니다. 명령의 PID를 이 숫자로 바꾸십시오. fd은 약어이다파일 설명자
  2. proc주석 작성자가 제공한 명령의 변형을 사용하여 파일 시스템의 올바른 PID 분기에 있는지 확인하십시오.ls -l |grep deleted
  3. 이제 문제 는 stderr 과 stdout을 다음 으로 리디렉션하는 >/dev/null 2>&1것입니다 .(deleted)2>&1빈 장치. 또한보십시오:파이프의 출력을 >/dev/null로 리디렉션하는 방법dev/null자세한 설명 및 리디렉션.

일부 독자들은 첫 번째 리디렉션 연산자의 왼쪽에 아무것도 기록되지 않은 이유를 물을 수 있습니다. 저는 우리가 파일 설명자 디렉터리에 있기 때문에 파일 설명자가 왼쪽 인수로 가정된다고 믿습니다.

답변3

나는 veracrypt 레이어가 디스크 공간 문제와 관련이 없다고 생각합니다. Veracrypt는 파일 시스템에 대해 아무것도 모르는 블록 계층입니다. Ext4는 블록 장치 위에 위치하는 파일 시스템입니다. 디스크 공간을 복구하지 않으면 파일 시스템 문제입니다.

블록 크기(다른 답변에서 논의됨) 이외의 고려 사항은 스파스 파일과 별도로 복사되는 하드 링크 파일입니다. 둘 다 플래그에 의해 관리됩니다 rsync. 둘 다 선택한 플래그에 의해 무시됩니다. 다음 두 명령의 디스크 사용량을 비교하여 이를 확인할 수 있습니다.

du -hsx /media/veracrypt1
du -hsxl --apparent-size /media/veracrypt1

연결한 질문에서 전체 시스템 백업에 대해 이야기하셨습니다. 이 경우 /dev및 일반적 으로 /tmp. 하지만 여기서는 디렉터리 경로를 사용하고 있으므로 여기서는 해당 경로를 계속 사용하겠습니다.

rsync -axHS /media/veracrypt1/ /media/veracrypt2

노트:

  1. 희소 플래그는 기존 파일을 희소 파일로 대체하지 않습니다. 이러한 파일을 직접 처리하거나 먼저 삭제해야 합니다.
  2. 마찬가지로, rsync동일하지만 아직 하드링크되지 않은 파일은 모두 하드링크되지 않습니다.
  3. 원래 명령 으로 소스 디렉터리 경로 접미사를 추가 /media/veracrypt2/veracrypt1하면 /먼저 source라는 하위 디렉터리를 만들지 않고도 대상에 직접 복사를 수행할 수 있습니다.

관련 정보