그래서 저는 삼바 파일 전송이 너무 느려서 사용할 수 없는 이유에 대해 매우 혼란스러워합니다. 처음에는 빠른 것처럼 보였지만 다시 설정해야 할 정도로 멈추거나 매우 느려졌습니다. 과거에는 RaspberryPi를 사용한 유사한 접근 방식이 저에게 효과적이었습니다.
rasp1
설정을 위해 말하자면 적어도 두 개의 RaspberryPi가 있습니다 rasp2
. 그런 다음 rasp1
마운트하고 drive1
다시 rasp2
마운트하십시오 drive2
. 이러한 드라이브는 ntfs 또는 ext4로 포맷된 USB 드라이브이며 크기는 2~6TB입니다. 따라서 RaspberryPi에는 실제로 USB를 통해 마운트된 하나 이상의 드라이브가 있습니다 mount /<device>/<identifier> <target_directory>
. 그런 다음 드라이브를 네트워크에 노출하도록 Samba를 구성합니다.
[storage]
path = <path_to_directory_containg_mountpoints>
public = no
browseable = yes
writeable yes
create mask = 0777
directory mask = 0777
valid user = <list of valid users>
그리고 부팅하여 sudo /etc/init.d/samba start
. 두 장치 rasp2
모두 USB 드라이브를 네트워크에 노출하고 클라이언트가 USB 드라이브에 설치할 수 있도록 rasp1
비슷한 구성이 있습니다 . rasp2
전체 원리는 RaspberryPi의 집에서 만든 NAS 및 외부 USB 드라이브와 비교할 수 있습니다.
이제 고객을 위한 것입니다. 우리의 경우 고객은 관심 있는 드라이브를 설치 drive1
하고 각 드라이브를 개별적으로 drive2
살펴보기 만 하면 됩니다 sudo mount -t cifs //<RaspberryPi_IP>/storage/<mountpoint_for_drive1> <target_directory> -o user=<user_from_list_of_valid_users>,gid=<local_usergroup>,sid=<local_user>
. 그들은 모두 로컬 네트워크에 있습니다.
이 접근 방식의 주요 문제점은 클라이언트 마운트 지점을 통해 drive1
클라이언트로의 파일 전송 속도가 drive2
형편없다는 것입니다. 파일 전송 진행 상황을 인스턴스화하면 mv -vi "drive1/file1" "drive2/"
진행 상황은 rsync -a --info=progress2 --remove-source-files "drive1/file1" "drive2/"
파일 크기에 따라 달라집니다. 파일 크기가 1.8M 미만이면 예상대로 쉽게 파일을 전송할 수 있습니다. 그러나 파일이 더 크면 아무 일도 일어나지 않는 것 같습니다. iotop
초기 데이터 전송 급증이 표시됩니다 smbd
. 그런 다음 마운트가 0%에서 중지되고 또 다른 급증이 발생하기 전에 오랫동안 해당 상태로 유지됩니다. 따라서 기술적으로 이러한 급증이 몇 분 동안만 발생하더라도 파일은 전송됩니다.
제 생각에는 다음과 같을 것 같습니다. 이제 작은 패킷의 경우 먼저 네트워크에 대해 더 자세히 추측하는 것은 문제가 되지 않습니다. 64바이트 ping을 수행하면 RaspberryPi에서 클라이언트 ms로 또는 클라이언트에서 ~0.3의 상수를 얻습니다. 핑. 라즈베리 파이. 몇 가지를 시도한 결과 재부팅( sudo reboot
RaspberryPi, 그런 다음 다시 설치하고 삼바를 다시 시작)하면 이전의 동시 IO 작업 양에 따라 특정 양의 IO 작업 또는 몇 분 동안 문제를 해결할 수 있는 것 같습니다. 그들은 멈춘다. 어쩌면 이것은 Resource temporarily unavailable
내가 여러 번 겪었던 오류, 즉 이 설정에서 겪었던 또 다른 문제와도 관련이 있을 수 있습니다. 때로는 마운트 지점을 나열하는 데 시간이 오래 걸리지만(특별히 command 를 통하지 않고 mount
) 여러 드라이브가 마운트된 디렉터리로 이동하는 경우가 있습니다. 나는 이 드라이브가 절전 모드로 전환될 것이라고 생각했기 때문에(예를 들어 쿼리를 실행하면 절전 모드로 전환될 것이라고 생각하기도 했습니다 find . -type f [...]
) 대기 모드를 비활성화했지만 sudo /usr/bin/sdparm --clear=STANDBY /<device>/<identifier>
지금까지는 예상한 결과를 가져오지 못했습니다. 내가 생각하는 또 다른 문제는 범인이 파일 시스템 오류라는 것입니다. 너무 느린 여러 rsync 및 mv 인스턴스를 종료했기 때문에 아마도 그중 하나를 조기에 종료했을 것입니다. 그래서 sudo fsck /<device>/<identifier>
ext4와 ntfs를 별도로 실행합니다 sudo ntfsfix
. 실제로 드라이브 중 하나에 문제가 있었는데, 수리 후에도 문제가 지속되었습니다(드라이브가 설치된 디렉토리 나열이 느리고, 데이터 전송이 느렸습니다) fsck
. 때때로 RaspberryPi는 코어 중 하나가 예상 응답도 표시되지 htop
않을 때까지 몇 초 동안 100%로 사용되는 것으로 표시됩니다 .iotop
htop
RaspberryPI OS is: Linux raspberrypi 4.14.34-v7+ #1110 SMP <time> armv7l GNU/linux
Client can be windows or linux
Samba on RaspberryPi is: ( `samba --version` ) Version 4.5.12-Debian
간단히 말해서:
Samba 탑재 드라이브를 사용하는 RaspberryPi는 파일 이동(읽기) 속도가 매우 느립니다.
ls를 통해 마운트 지점을 표시하는 데 시간이 오래 걸리고 때로는 종료되기도 합니다
Resource temporarily unavailable
.(별도의 문제일 수 있음) IO 작업을 수행하는 동안 드라이브가 절전 모드로 전환됩니다.