ایده کلی:

    میخوایم یک حافظه رو تو شبکه محلی (مثلا خونه) به اشتراک بگذاریم تا بتونیم راحت با یک نام کاربری به اطلاعاتمون دسترسی داشته باشیم.

مورد نیازها:

  1.     اول از همه به یک حافظه نیاز داریم برای اینکه اون رو تو شبکه به اشتراک بگذاریم، که میتونه یک فلش یا یک هارد دیسک اکسترنال باشه که البته من ترجیح دادم از هارد اکسترنال که برقش جدا تامین میشه استفاده کنم که بهش هارد اکسترنال دسکتاپی و یا هارد اکسترنال ۳.۵ اینچی میگن. هاردی که خودم استفاده کردم یک هارد ۳ ترابایتی هست که داخل عکس معلومه، به نسبت خیلی بزرگ هست و شما میتونید از حافظه‌های کوچکتر استفاده کنید.
  2. بعد نیاز به یک برد Raspberry Pi داریم که با یک شارژر گوشی اندروید ساده روشن میشه،
  3. یک حافظه ‌MicroSD ترجیحا ۸ گیگ،
  4. یک سوییچ شبکه (اینجا از مودم ‌ADSL بیسیم که دارای ۴ پورت شبکه هست استفاده شده چون سرویس‌هایی مانند DHCP و اتصال به اینترنت و سوییچ شبکه را خودکار انجام میده)
  5. و یک مقدار اینترنت جهت دانلودها و جستجوی مطالب مورد نیاز. :)

 

(مطالب یک برداشت و ترجمه داغون و سر هم بندی شده از منابع مختلف و بلاهایی که سر هارد خودم آوردم هست )

خب اول باید روی کارت حافظه MicroSD یک سیستم عامل نصب کنیم تا برد از روی اون بوت بشه؛ برای این برد سیستم عامل های متفاوتی ارائه شده و من از Raspbian استفاده کردم. دانلود

ایمیج دانلود شده رو طبق دستورات این لینک به روی کارت حافظه منتقل می‌کنید و MicroSD رو داخل شیار مخصوص روی برد قرار می‌دهید.
اگر از طریق ویندوز میرید اینجا من خودم از rufus استفاده می‌کنم.
اگر از طریق گنو/لینوکس اقدام می‌کنید از اینجا که به راحتی از دستور ‌dd استفاده می‌کنید. ؛)
در این لینک آموزش نحوه بوت کردن برد از روی یک فلش مموری را آموزش می‌دهد؛
همچنین معمولا از تمام فضای کارت حافظه استفاده نمی‌شود، در مرحله ۵ همین لینک نحوه رفع این مسئله توضیح داده شده.

حالا برد رو روشن و با کابل شبکه به مودم متصل می‌کنیم؛ در اینجا باید با برد ارتباط برقرار کنیم اگر شد موس و کیبرد و مانیتور رو به برد وصل می‌کنیم و مستقیما ادامه می‌دهیم، ولی نیازی به این کار نیست با داشتن آدرس IP برد از سیستم با ssh به برد متصل می‌شویم، که در ویندوز با استفاده از نرم‌افزار putty و در گنو/لینوکس هم که به راحتی با دستور ssh user@ipaddress این امر میسر هست؛ نام کاربری پیش‌فرض سیستم عامل راسپبیان pi و رمز ورودش raspberry هست.

حالا که به سیستم لاگین کردید ابتدا باید مخازن رو آپدیت کنید با دستور sudo apt-get update چند لحظه زمان می‌برد؛
برای پشتیبانی از فایل سیستم ها و اشتراک گذاری از طریق smb موارد زیر را نصب می‌کنیم:

sudo apt-get install ntfs-3g
sudo apt-get install samba
sudo apt-get install samba-common-bin

*.    در اول کار ممکن است به علت تنظیم نبودن موقعیت زمانی با خطایی مانند خطای زیر روبه‌رو شوید:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = "en_GB.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

برای رفع این خطا طبق راهنمایی این لینک عمل کنید
خب باید مطمئن شویم که هارد اکسترنال من جایی مونت نشده باشد، اول با دستور sudo fdisk -l چک می‌کنم که هارد من رو شناخته باشه، خروجی دستور چیزی شبیه این هست:

Disk /dev/mmcblk0: 7969 MB, 7969177600 bytes
4 heads, 16 sectors/track, 243200 cylinders, total 15564800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa6202af7

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880    15564799     7720960   83  Linux
Note: sector size is 4096 (not 512)



Disk /dev/sda: 3000.6 GB, 3000558944256 bytes
255 heads, 63 sectors/track, 45599 cylinders, total 732558336 sectors
Units = sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00028375
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1       667022336   732558335   262144000    5  Extended
/dev/sda2       262144256   667022335  1619512320    7  HPFS/NTFS/exFAT
/dev/sda3             256   262144255  1048576000   83  Linux
/dev/sda5       667022592   732558335   262142976    7  HPFS/NTFS/exFAT

Partition table entries are not in disk order

خب همونطور که معلومه دیسک اول که به نام /dev/mmcblk0 شناخته کارت حافظه هست و دیسک دوم که با نام /dev/sda/ شناخته هارد اکسترنال مورد نظر. (چه پارتیشن بندی داغونی هم داره ولی خب! ؛> ) ما فرض می‌کنیم که کل هارد رو یک پارتیشن NTFS در نظر گرفتیم و اون هم به نام sda1 :)
حالا با دستور df چک می‌کنیم چه مواردی مونت شده هستند اگر در خروجی خبری از هارد نبود -دراینجا /dev/sda/- یعنی مونت نشده.
من میخوام در مسیر /media/ یک دایرکتوری به نام storage بسازم و هارد رو اونجا مونت کنم.

sudo mkdir /media/storage

حالا می‌خوایم پارتیشن مورد نظر هارد رو در این مسیر مونت کنیم برای مونت کردن پارتیشن NTFS از این دستور استفاده می‌کنیم:

sudo mount -t auto /dev/sda1 /media/storage

الآن میریم برای اشتراک گذاری. یک پوشه داخل هاردمون می‌سازیم تا اون رو share کنیم تا از طریق شبکه به اطلاعات داخلش دسترسی داشته باشیم.

sudo mkdir /media/storage/share

تا الآن همه کارها رو با یوزر pi انجام می‌دادیم اما بهتره که از یوزر دیگه‌ای استفاده کنیم. برای این منظور یک یوزر ایجاد میکنیم به نام USERNAME که شما اسم مورد نظرتون رو بجاش وارد کنید.

useradd USERNAME -m -G users

ساخت پسورد

passwd USERNAME

متصل کردن یوزر محلی به سرویس SAMBA

smbpasswd -a USERNAME

باید فایل تنظیمات SAMBA رو پیکربندی کنیم:
اول از همه و مهم پشتیبان‌گیری از این فایل

cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

و بعد اعمال تغییرات؛ با یک ادیتور مثل nano و یا vi فایل تنظیمات و رو باز می‌کنیم و تغییرات رو اعمال می‌کنیم:

nano /etc/samba/smb.conf

به آخر فایل موارد زیر را اضافه می‌کنیم

security = user
###### SHARES ######
[media] comment = Media share
path = /media/storage/share
valid users = @users
force group = users
create mask = 0660
directory mask = 0771
read only = no

داخل [] اسم مورد نظر برای دایرکتوری اشتراک گذاشته شده رو بنویسید.

روبه روی path و به جای /media/storage/share آدرس اون دایرکتوری رو که داخل هارد ساخته بودیم برای اشتراک گذاری رو قرار بدید.

در پایان فایل مورد نظر رو ذخیره و سرویس رو ریست می‌کنیم:

sudo service samba restart

بروزرسانی: دستور ریستارت سرویس در نسخه‌های جدید تغییر کرده است. برای ریستارت کردن سرویس smb از دستور زیر استفاده میکنیم:

sudo service smbd restart

از این به بعد از طریق گوشی هوشمند، سیستم شخصی، لپ‌تاپ و سایر موارد مشابه که در شبکه ما قرار دارند با استفاده از یوزر به اطلاعات هارد دسترسی خواهید داشت.

برای آندروید من از اپلیکشن ES File Explorer

پ.ن: اگر بعد از هر ریستارت هارد خودش مونت نمی‌شود و مجبور هستید دوباره دستی مونت کنید از راهنمایی لینک زیر استفاده کنید.

http://www.techjawab.com/2013/06/how-to-setup-mount-auto-mount-usb-hard.html

 

نکات:

ممکنه بخواید یک یا چند گروه بسازید و کاربرها رو داخل یک گروه مشابه یا چند گروه قرار بدید.

  • برای ساخت گروه از دستور زیر میتونیم استفاده کنیم:
    sudo groupadd MYGROUPNAME
  • برای اضافه کردن یک User که از قبل ساخته شده بوده به یک گروه از دستور زیر استفاده میکنیم:
     
    sudo usermod -a -G MYGROUPNAME USERNAME
  • برای اینکه بتونیم چک کنیم هر User در چه گروه‌هایی عضو هست و id اون‌ها چیه از دستور زیر استفاده می‌کنیم:
     

    id USERNAME
  • برای بررسی Owner دایرکتوریها مورد نظر میتونیم از دستور زیر استفاده کینم:
    sudo ls -ltrh
    البته میتونیم از روش‌های دیگه هم استفاده کنیم. خروجی دستوری بالا چیزی شبیه به زیر هست:
    total 212K
    -rwxrwxrwx 1 root root 168K Apr  7  2017  MyFile.txt
    drwxrwxrwx 1 root root    0 Nov  2  2018  MyDirectory
    drwxrwxrwx 1 root root    0 Jan 19  2019  AnotherFILE
    -rwxrwxrwx 1 root root    0 Apr 12  2019  DIR2test
    
    همینطور که دیده میشه در مثال بالا مالیکیت همه موارد بالا در اختیار کاربر root هست.
  • ممکنه لازم باشه مالک داده‌ها رو تغییر بدیم.
    برای تغییر Owner  از دستور کلی زیر استفاده میکنیم:
    sudo chown [OPTIONS] USER[:GROUP] FILE(s)
    برای تغییر مالکیت به صورت سلسله مراتب تا پایین‌ترین فایل و دایرکتوری از دستور زیر استفاده میکنیم:
    sudo chown -R USER:GROUP DIRECTORY

     

منابع:

+

+

+

+

+

+

+

+

+