рддреЛ рдЖрдк рдПрдХ рдлреЛрд▓реНрдбрд░ рд╕реЗ рд▓рд╛рдЦреЛрдВ рдлрд╛рдЗрд▓реЗрдВ рдХреИрд╕реЗ рдбрд┐рд▓реАрдЯ рдХрд░рддреЗ рд╣реИрдВ?


рдПрдХ рднреАрдбрд╝ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдкрд░ рдордВрддреНрд░рдореБрдЧреНрдз рдХрд░ рджреЗрдирд╛ред

рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреЛ рд╣рд╛рд░реНрдб рдбрд┐рд╕реНрдХ рдХреЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдпрд╛ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд▓рд╛рдЦреЛрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдкрдврд╝рд╛ рдФрд░ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖред рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдирдХ рд▓рд┐рдирдХреНрд╕ рдЯреВрд▓рдХрд┐рдЯ рдореЗрдВ рднреАрдбрд╝ рд╡рд╛рд▓реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд░рд▓ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рд╕реАрдзреЗ рдХреЙрд▓ getdents() рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЕрд╡рдЧрдд рдирд╣реАрдВ рд╣реИрдВ, рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг: рдпрджрд┐ рдЖрдкрдиреЗ рдЧрд▓рддреА рд╕реЗ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╣реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдИ рд╣реИрдВ - рдЕрд░реНрдерд╛рддред рдПрдХ рд╣реА рдлреНрд▓реИрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдкрдбрд╝реА 5 рдорд┐рд▓рд┐рдпрди рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдбрд┐рд▓реАрдЯ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд╕рднреА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдпрд╛ рддреЛ рд╡реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ / рдПрдЪрдбреАрдбреА рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓реЛрдб рдХрд░реЗрдВрдЧреЗ, рдпрд╛ рд╡реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рд▓реЗрдВрдЧреЗред

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рдордп рд▓рд┐рдпрд╛, рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рд╛рдЗрдЯ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд┐рдпрд╛ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рджреЛрдиреЛрдВ рдиреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджрд┐рдП рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд▓реЗрдЦреЛрдВ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд╛рдПред

рдЯреНрд░реЗрдирд┐рдВрдЧ


рдЪреВрдБрдХрд┐ рдЖрдк рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдЕрдкрдиреЗ HDD рдкрд░ рдПрдХ рднреАрдбрд╝ рднрд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдорди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ FS рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд▓реВрдк рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд▓рд┐рдирдХреНрд╕ рдкрд░, рдпрд╣ рдЖрд╕рд╛рди рд╣реИред

рдПрдХ рдЦрд╛рд▓реА 200GB рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
 #!python f = open("sparse", "w") f.seek(1024 * 1024 * 1024 * 200) f.write("\0") 

рдХрдИ рд▓реЛрдЧ рдЗрд╕рдХреЗ рд▓рд┐рдП dd рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП dd if=/dev/zero of=disk-image bs=1M count=1M , рд▓реЗрдХрд┐рди рдпрд╣ рдЕрддреБрд▓рдиреАрдп рд░реВрдк рд╕реЗ рдзреАрдорд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдпрд╣ рд╕рдорд╛рди рд╣реИред

рдлрд╝рд╛рдЗрд▓ рдХреЛ ext4 рдореЗрдВ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдЙрдВрдЯ рдХрд░реЗрдВ
 mkfs -t ext4 -q sparse # TODO: less FS size, but change -N option sudo mount sparse /mnt mkdir /mnt/test_dir 

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВрдиреЗ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж mkfs.ext4 рдХрдорд╛рдВрдб рдХреЗ -N рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ред рдпрд╣ рдЖрдкрдХреЛ рдЫрд╡рд┐ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рдП рдмрд┐рдирд╛ рдПрдлрдПрд╕ рдкрд░ рдЗрдиреЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╕реАрдорд╛ рдмрдврд╝рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рджреВрд╕рд░реА рдУрд░, рдорд╛рдирдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдХрд░реАрдм рд╣реИрдВред

рд╣рдо рдХрдИ рдЦрд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ (рдпрд╣ рдХрдИ рдШрдВрдЯреЛрдВ рддрдХ рдХрд╛рдо рдХрд░реЗрдЧреА)
 #!python for i in xrange(0, 13107300): f = open("/mnt/test_dir/{0}_{0}_{0}_{0}".format(i), "w") f.close() if i % 10000 == 0: print i 

рд╡реИрд╕реЗ, рдЕрдЧрд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдереАрдВ, рддреЛ рдмрд╛рдж рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдард╣рд░рд╛рд╡ рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдХрд░реНрдиреЗрд▓ рдХреА рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реБрдИред рдЗрддрдиреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдПрдХ рдлреНрд▓реИрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред

рд╣рдо рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ FS рдкрд░ рд╕рднреА рдЖрдпрддреЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИрдВред
  $ df -i
 / рджреЗрд╡ / рд▓реВрдк режрезрейреж 13реирежреж резрейрезреж 3реи рей рей 100релрез 13 резрежреж% / mnt 

рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ ~ 360Mb
  $ ls -lh / mnt /
 drwxrwxr-x 2 seriy seriy 358M рдиреЛрд╡  1 03:11 test_dir 

рдЕрдм рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдЕрдкрдиреА рд╕рднреА рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

рдкрд░реАрдХреНрд╖рдг


рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рдж, рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреИрд╢ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ
sudo sh -c 'sync && echo 1 > /proc/sys/vm/drop_caches'
рдЖрджреЗрд╢ рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рд╕рднреА рдореЗрдореЛрд░реА рдирд╣реАрдВ рд▓реЗрдиреЗ рдФрд░ рд╕рдорд╛рди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╣рдЯрд╛рдиреЗ рдХреА рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред

Rm -r рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдХрд╛рд▓рдирд╛


$ rm -r /mnt/test_dir/
getdents() рддрд╣рдд, рдХрдИ рдмрд╛рд░ рдПрдХ рдкрдВрдХреНрддрд┐ (!!!) рдореЗрдВ getdents() ) рдХреЙрд▓ рдХрд┐рдпрд╛ getdents() , рдлрд┐рд░ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ unlinkat() рдФрд░ рдПрдХ рд▓реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред 30Mb RAM рд▓рд┐рдпрд╛, рдмрдврд╝ рдирд╣реАрдВ рд░рд╣рд╛ред
рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рдЯрд╛рддрд╛ рд╣реИред
  iotop
  7664/4 рд╕реЗрд░реА 72.70 рдПрдо / рдПрд╕ 0.00 рдмреА / рдПрд╕ 0.00% 93.15% рдЖрд░рдПрдо -рдЖрд░ / рдПрдордПрдирдЯреА / рдЯреЗрд╕реНрдЯ_рдбрд┐рд░ /
  5919/0 рд░реВрдЯ 80.77 M / s 16.48 M / s 0.00% 80.68% [рд▓реВрдк 0] 

рдпрд╛рдиреА rm -r /// рд╕рд╛рде рднреАрдбрд╝ рд╡рд╛рд▓реА рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдХреЛ рд╣рдЯрд╛рдирд╛ рдареАрдХ рд╣реИред

Rm ./* рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдЯрд╛рдирд╛


$ rm /mnt/test_dir/*
рд╢реЗрд▓ рдХреА рдПрдХ рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ 600MB рддрдХ рдмрдврд╝ рдЧрдпрд╛ рд╣реИ , ^C рд▓рд┐рдП nailed ^C рдХреБрдЫ рднреА рдбрд┐рд▓реАрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рддрд╛рд░рд╛рдВрдХрди рджреНрд╡рд╛рд░рд╛ glob рдХреЛ рд╢реЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╣реА рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреВрд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдмрд╛рдж rm рдХрдорд╛рдВрдб рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдвреВрдБрдвреЗрдВ -exec рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ


$ find /mnt/test_dir/ -type f -exec rm -v {} \;
getdents() рддрд╣рдд, рдпрд╣ рдХреЗрд╡рд▓ getdents() рдХрд╣рддрд╛ рд╣реИред the ^C рджреНрд╡рд╛рд░рд╛ nailed рдХреА find рдкреНрд░рдХреНрд░рд┐рдпрд╛ 600MB рддрдХ рдмрдврд╝ рдЧрдИ ^C рдХреБрдЫ рднреА рдбрд┐рд▓реАрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рд╢реЗрд▓ рдореЗрдВ * рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ - рдкрд╣рд▓реЗ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдмрдирд╛рддрд╛ рд╣реИред

рдЦреЛрдЬ-рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдЯрд╛рдирд╛


$ find /mnt/test_dir/ -type f -delete
600MB рддрдХ рдмрдврд╝ рдЧрдпрд╛, ^C рджреНрд╡рд╛рд░рд╛ nailed ^C рдХреБрдЫ рднреА рдбрд┐рд▓реАрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдкрд┐рдЫрд▓реЗ рдХрдорд╛рдВрдб рдХреЗ рд╕рдорд╛рдиред рдФрд░ рдпрд╣ рдмреЗрд╣рдж рдЕрджреНрднреБрдд рд╣реИ! рдореИрдВрдиреЗ рд╢реБрд░реВ рдореЗрдВ рдЗрд╕ рдЯреАрдо рдкрд░ рдЕрдкрдиреА рдЙрдореНрдореАрджреЗрдВ рд▓рдЧрд╛рдИрдВред

Ls -f рдФрд░ xargs рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдХрд╛рд▓рдирд╛


$ cd /mnt/test_dir/ ; ls -f . | xargs -n 100 rm
-f рд╡рд┐рдХрд▓реНрдк рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛рддрд╛ рд╣реИ:
  |  - рдПрд▓рдПрд╕ 212 рдХреЗрдмреА
  |  - xargs 108Kb
     |  - rm 130Kb # rm рдкрд░ pid рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ 

рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рдЯрд╛рддрд╛ рд╣реИред
  iotop # рдмрд╣реБрдд рдХреВрджрддрд╛ рд╣реИ
  рел реп рез реп рд╣реЛ / реж рд░реВрдЯ рел. M / рдПрдо / рдПрд╕ рем.реи / рдПрдо / рдПрд╕ реж.режреж%% реп .резрел% [рд▓реВрдк реж] 

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ ls -f find рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдЬрдорд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред ls рдмрд┐рдирд╛ рдорд╛рдкрджрдВрдбреЛрдВ (рдЬреИрд╕реЗ find ) - рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдкрдврд╝рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдЫрдБрдЯрд╛рдИ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдзрд┐ рдЦрд░рд╛рдм рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ rm рдХрд╣рддреА рд╣реИ, рдЬреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрд░рд┐ рдмрдирд╛рддрд╛ рд╣реИред
рдПрдХ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ - рдЖрдк рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ ls -f рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕ рд╕реВрдЪреА рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд░реНрд▓ рд░реАрдбрдбреАрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ


$ perl -e 'chdir "/mnt/test_dir/" or die; opendir D, "."; while ($n = readdir D) { unlink $n }' $ perl -e 'chdir "/mnt/test_dir/" or die; opendir D, "."; while ($n = readdir D) { unlink $n }' ( рдпрд╣рд╛рдВ рдЪреБрдирд╛ рдЧрдпрд╛ )
getdents() рддрд╣рдд strace рдпрд╣ getdents() рдПрдХ рдмрд╛рд░ рдХреЙрд▓ getdents() , рдлрд┐рд░ рдХрдИ рдмрд╛рд░ unlink() рдФрд░ рдЗрд╕реА рддрд░рд╣ рд▓реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмрдврд╝рддреЗ рд╣реБрдП рдирд╣реАрдВ, рдореЗрдореЛрд░реА рдХреА 380Kb рд▓реЗ рдЧрдпрд╛ред
рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рдЯрд╛рддрд╛ рд╣реИред
  iotop
  7591/4 рд╕реЗрд░реА 13.74 M / s 0.00 B / s 0.00% 98.95% perl -e chdi ...
  рел реп рез реп рд╣реЛ / реж рд░реВрдЯ резрез.рез M рдореЗрд╕рд░реНрд╕ резрекрей8. / / K / s реж.режреж% реп рей. %рел% [рд▓реВрдк реж] 

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд░реАрдбрд┐рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ?

рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рд░реАрдбрд┐рд░ + рдЕрдирд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ


 //file: cleandir.c #include <dirent.h> #include <sys/types.h> #include <unistd.h> int main(int argc, char *argv[]) { struct dirent *entry; DIR *dp; chdir("/mnt/test_dir"); dp = opendir("."); while( (entry = readdir(dp)) != NULL ) { if ( strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..") ){ unlink(entry->d_name); // maybe unlinkat ? } } } 

$ gcc -o cleandir cleandir.c
$ ./cleandir
getdents() рддрд╣рдд strace рдпрд╣ getdents() рдПрдХ рдмрд╛рд░ рдХреЙрд▓ getdents() , рдлрд┐рд░ рдХрдИ рдмрд╛рд░ unlink() рдФрд░ рдЗрд╕реА рддрд░рд╣ рд▓реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ 128Kb рдореЗрдореЛрд░реА рд▓реЗрддрд╛ рд╣реИ , рдмрдврд╝рддрд╛ рдирд╣реАрдВ рд╣реИред
рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рдЯрд╛рддрд╛ рд╣реИред
  iotop:
  7565/4 рд╕реЗрд░реА 11.70 M / s 0.00 B / s 0.00% 98.88% ./cleandir
  рел реп рез реп рд╣реЛ / реж рд░реВрдЯ резреи.реп / рдПрдо / рдПрд╕ резреж3 реп .реирей рдХреЗ / рдПрд╕ реж.режреж% реп реи.рекреи% [рд▓реВрдк реж] 

рдлрд┐рд░ рд╕реЗ, рд╣рдо рдЖрд╢реНрд╡рд╕реНрдд рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдореЗрдореЛрд░реА рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдЬрдорд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рддреБрд░рдВрдд рд╣рдЯрд╛рддреЗ рд╣реИрдВ рддреЛ readdir рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖



рдкреБрдирд╢реНрдЪ: рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЬрд┐рд╕реЗ рдореИрдВ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛; os.listdir () рдФрд░ os.walk () рдкреВрд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрдврд╝реЗрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ PHP рдореЗрдВ рднреА рд░реАрдбрд┐рд░ рд╣реИ ред

Source: https://habr.com/ru/post/In157613/


All Articles